当前位置: 首页 > 知识库问答 >
问题:

未授权PayPal live付款

费锋
2023-03-14

我有问题让贝宝接受从我的应用程序的实时支付。我正在使用一个Azure服务器,用C#编写代码,带有一个基于Xamarin的Android客户端应用程序。我可以得到所有工作与贝宝沙箱,但它失败时,我切换到实时凭据。下面是我的付款流程:

1)在我的Android应用程序中,启动PayPal应用程序授权支付。这返回一个授权代码。该代码类似于C21AAHHVXYJKTRK82SOMDGL6SSQD85LLMSO5UXADTMW4ABEYIEWDC_6MUXWK84HFETEOTGeorgiengEOIUGHURIU-Q

2)将代码传递给服务器;使用grant_type为client_credentials的代码获取承载令牌。返回的令牌如下所示:

"scope": "https://uri.paypal.com/services/subscriptions https://api.paypal.com/v1/payments/.* https://api.paypal.com/v1/vault/credit-card https://uri.paypal.com/services/applications/webhooks https://uri.paypal.com/services/payments/futurepayments openid https://api.paypal.com/v1/vault/credit-card/.*",
"nonce": "2017-12-31T12:07:46ZPYBveV0qcOc2apceqHbTBrXXVsuGCryP05-xxxxxxxxxxx",
"access_token": "A23AAHweO7uu8vuXs45CVOafwqFHGj03riRShISJRnHn4Pr1bzwdDfaG5JkqCT5oZ_pFWGBK-wScOq2JeDERe2USxxxxxxxxxxxxx",
"token_type": "Bearer",
"expires_in": 28800,
"refresh_token": "R23AAFR7MtimwU1AeQ7V6pTw0ugxN4AzOsRr-tBfmChMBAK8IMrJO_WQ6WgLUxbkK8ssvHoPVFFdVVAorNZriMX8gUA1tb-iRzwj7aiQ3_KCv5SDnqjf5j3vxKeZG052Q7WpSbW2zxxxxxxxxxxxxx"

3)随持币令牌提交REST请求以授权支付,REST请求如下所示:

{
    "intent": "sale",
    "payer": {
        "payment_method": "paypal"
    },
    "transactions": [{
        "amount": {
            "currency": "GBP",
            "total": 1.0
        },
        "payee": {
            "email": "xxxxxxxxxxxxxxxxxx"
        },
        "description": "Test item",
        "payment_options": {
            "allowed_payment_method": "INSTANT_FUNDING_SOURCE"
        }
    }

请注意,我们必须在我们的请求中设置收款人,因为我们自己并不接收付款。

"id":"PAY-258208691145776xxxxxxxxx",
    "intent":"sale",
    "state":"created",
    "cart":"1JF69642C9xxxxxxx",
    "transactions":[
        {
            "amount":{
                "total":"1.00",
                "currency":"GBP"
            },
            "payee":{
                "merchant_id":"xxxxxxxxxxxxxx",
                "email":"xxxxxxxxxxxxxxx"
            },
            "description":"Test item",
            "related_resources":[]
        }
    ],
    "redirect_urls":{
        "return_url":"xxxxxxxxxxxxxxxxx/return?paymentId=PAY-xxxxxxxxxxxxxxxxxxxxxxx",
        "cancel_url":"xxxxxxxxxxxxxxxx/cancel"
    },
    "create_time":"2018-08-20T10:22:19Z",
    "update_time":"2018-08-20T10:22:20Z",
    "links":
    [
        {
            "href":"https://api.paypal.com/v1/payments/payment/PAY-xxxxxxxxxxxxxxxxxxxxxxx",
            "rel":"self","
            "method":"GET"
        },
        {
            "href":"https://api.paypal.com/v1/payments/payment/PAY-xxxxxxxxxxxxxxxxxxxxxxx/execute",
            "rel":"execute",
            "method":"POST"
        },
        {
            "href":"https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxxxxxxxxxxxxxxxxxxx",
            "rel":"approval_url","method":"REDIRECT"
        }
    ]
using (HttpClient client = new HttpClient())
{
    try
    {
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));
        client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("en-GB"));
        client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
        var responseMessage = await client.GetAsync(paymentURL);
        ret1 = await responseMessage.Content.ReadAsStringAsync();
    }
    catch (Exception ex)
    {
        return ex.ToString();
    }
}

因此,我使用cURL运行了一个测试事务(即完全手动复制并粘贴命令),使用相同的支付细节。支付流程略有不同,但奏效了。然而,我从PayPal得到了一个client_id,它不在步骤(3)得到的响应中,因此我无法使用cURL运行我的实际交易,但我怀疑这是因为cURL方法是一个web支付流(即,我最终在PayPal的网站上授权支付),而我的系统不使用web而仅使用PayPal的移动应用程序。顺便说一句,该应用程序返回的长代码在cURL请求中不起作用。

这里似乎很不对劲,但它在沙箱中起作用,即使我在步骤1中使用了authorization_code的grant_type(但在步骤2中,该grant_type会失败)。我正在使用正确的live PayPal id和秘密。有人对我在这里做错了什么有什么建议吗?我尝试了PayPal的支持,但他们只建议使用cURL,如果没有client_id我就不能为事务使用cURL。

多谢。

共有1个答案

诸福
2023-03-14

我终于得到了PayPal的答复,显然他们必须批准您的帐户,然后才能启用未来的付款,这是我最初用来获得授权类型的代码,然后允许我在REST响应中设置收款人。我在上面概述的步骤中所做的只是按照PayPal技术支持的指示进行操作,但无论如何都不起作用。希望这能解决这个问题,但如果PayPal把这个信息放在开发者站点的某个地方(也许它就埋在那里,但我还没有找到它),那就真的很有帮助了。

 类似资料:
  • 我正在使用PayPal快速结帐,我需要做的是稍后单独授权和捕获付款,我目前的PayPal流程是, 1) 我使用以下代码创建付款: Paypal将订单信息和重定向返回给我,我将用户重定向到

  • 问题内容: 我从Nexus存储库中检出了代码。我更改了帐户密码,并在文件中正确设置了密码。在执行时,我收到错误消息,说明它尝试从该存储库下载文件。 任何想法如何解决此错误?我在Maven 3.04中使用Windows 7 问题答案: 这里的问题是所使用的密码出现错字错误,由于密码中使用了字符/字母,因此很难识别。

  • 我试图通过Java Apachebeam MongoDbIO连接器连接到MongoDB,得到一个“未授权”错误。 同样的连接细节也适用于Python并能够检索数据。 “org.apache.beam.sdk.io.mongodbo.mongodbio$boundedmongodbsource.$closeresource(Mongodbio.java:407)位于org.apache.beam.s

  • 调试O.S.S.W.A.I.FilterSecurityInterceptor-以前已通过身份验证:org.springframework.security.authentication.anonymousauthenticationtoken@2dafa81d:principal:anonymouser;全权证书:[受保护];已认证:真实;详细信息:org.springframework.sec

  • 我的代码:GoogleCredential凭据 credential.refreshToken() 错误日志: 创建服务号的步骤: 我在凭据中的oauth 2.0中创建了一个Web应用程序 然后我用客户端ID创建了一个服务号 现在我正在使用这个服务号和从它生成的p12证书来验证和创建Google凭据的对象 一旦刷新令牌,我就给了我401例外。 在这种情况下,任何帮助都会受到感激