DoAuthorization返回“权限被拒绝”错误

时间:2014-01-16 07:45:49

标签: php paypal

我们正在开发一个买家和卖家会面交易的市场(类似于Ebay)。我们希望通过PayPal支持付款,我们不打算收取任何服务费。由于我们是一家创业公司,因此我们的任何管理费用都超出了我们,因此我们决定直接在买家和卖家之间进行任何PayPal交易。

但是,我们希望为卖家提供接受/拒绝机制,以便他们必须手动批准每个订单(如果某些商品在实体店中缺货等)。订单接受后,应将钱转移给卖家。

经过大量思考和阅读PayPal文档后,我们决定使用auth / capture和并行支付概念来使用Express Checkout。我们已成功集成Express Checkout,一切正常,直到调用DoAuthorization API,但遗憾的是失败了。到目前为止我们所做的一切都在PayPal沙盒中。

为了让您了解我们与PayPal端点的通信是如何工作的,以下是我们正在做的事情(仅显示重要字段):

  1. 使用SetExpressCheckoutPAYMENTREQUEST_0_PAYMENTACTION=Order
  2. 致电PAYMENTREQUEST_0_SELLERPAYPALACCOUNTID={seller's PayPal email address}
  3. 将买家重定向到RedirectURL以授权付款
  4. 致电GetExpressCheckoutDetails以获取有关付款的信息
  5. 致电DoExpressCheckoutPayment PAYMENTREQUEST_0_PAYMENTACTION=Order
  6. 这里我们获得了有关状态为“待定”的交易的信息,似乎到目前为止一切正常(交易也在卖家的PayPal账户中可见,状态为“待定”)。现在根据可用的文档,我们需要调用DoAuthorization以完成身份验证过程。但是,在致电DoAuthorization后,我们面临一个错误说:

    [L_ERRORCODE] => 10007
    [L_SHORTMESSAGE] => Permission denied
    [L_LONGMESSAGE] => You do not have permissions to make this API call
    [L_SEVERITYCODE] => Error
    

    以下是我们通过DoExpressCheckoutPaymentDoAuthorization API调用发送和接收的内容(仅显示重要部分):

    DoExpressCheckoutPayment

    请求

    [REQUESTDATA] => Array
        (
            [USER] => {our API username}
            [PWD] => {our API password}
            [VERSION] => 98.0
            [BUTTONSOURCE] => AngellEYE_PHPClass
            [SIGNATURE] => {our API signature}
            [METHOD] => DoExpressCheckoutPayment
            [TOKEN] => {token we got from SetExpressCheckout}
            [PAYERID] => {payer ID we got from GetExpressCheckoutDetails}
            [RETURNFMFDETAILS] => 1
            [NOSHIPPING] => 1
            [PAYMENTREQUEST_0_AMT] => 123
            [PAYMENTREQUEST_0_ITEMAMT] => 23
            [PAYMENTREQUEST_0_SHIPPINGAMT] => 100
            [PAYMENTREQUEST_0_CURRENCYCODE] => EUR
            [PAYMENTREQUEST_0_DESC] => Order #54
            [PAYMENTREQUEST_0_SELLERPAYPALACCOUNTID] => {seller's PayPal email address}
            [PAYMENTREQUEST_0_PAYMENTACTION] => Order
        )
    

    响应

    [PAYMENTS] => Array
        (
            [0] => Array
                (
                    [TRANSACTIONID] => {we get some transaction ID here}
                    [TRANSACTIONTYPE] => expresscheckout
                    [PAYMENTTYPE] => None
                    [ORDERTIME] => 2014-01-15T22:43:19Z
                    [AMT] => 123.00
                    [FEEAMT] =>
                    [SETTLEAMT] =>
                    [TAXAMT] => 0.00
                    [EXCHANGERATE] =>
                    [CURRENCYCODE] => EUR
                    [PAYMENTSTATUS] => Pending
                    [PENDINGREASON] => order
                    [REASONCODE] => None
                    [PROTECTIONELIGIBILITY] => None
                    [ERRORCODE] => 0
                )
        )
    

    DoAuthorization

    请求

    [REQUESTDATA] => Array
        (
            [USER] => {our API username}
            [PWD] => {our API password}
            [VERSION] => 98.0
            [BUTTONSOURCE] => AngellEYE_PHPClass
            [SIGNATURE] => {our API signature}
            [METHOD] => DoAuthorization
            [TRANSACTIONID] => {transaction ID we got from DoExpressCheckoutPayment}
            [AMT] => 123
            [CURRENCYCODE] => EUR
        )
    

    响应

    [ERRORS] => Array
        (
            [0] => Array
                (
                    [L_ERRORCODE] => 10007
                    [L_SHORTMESSAGE] => Permission denied
                    [L_LONGMESSAGE] => You do not have permissions to make this API call
                    [L_SEVERITYCODE] => Error
                )
        )
    

    花了一周的时间试图让它工作,谷歌搜索并浏览所有可用的文档试图找到我们是否必须有权调用DoAuthorization API,我们是无能为力的。 如果这个问题太长,我们很抱歉,但我们希望您全面了解正在发生的事情以及我们如何使用PayPal API处理问题。如果知识渊博的人能够对这个问题有所了解,我们将感激不尽。

2 个答案:

答案 0 :(得分:1)

通常,这种错误意味着它所说的内容,而您的PayPal帐户根本没有权限进行该特定呼叫。

您是否特别希望暂停资金?您可以运行DoCapture直接捕获订单,而无需在两者之间进行授权,但订单授权实际上并不持有资金,因此您需要联系PayPal以了解您获得的原因,这是您解决问题的重要部分那个错误。

您可以向www.paypal.com/mts提交门票,直接转到技术支持。他们最近在更快地回到门票方面做得更好,所以我肯定会尝试这一点。

平均而言,你可以试试手机支持,但是,普通手机代表往往不知道如何解决这样的问题,最终会导致更多的混乱。

在任何一种情况下,只要让他们知道您正在尝试调用DoAuthorization API,但是您收到此错误,他们应该能够帮助您找到问题并让您得到照顾。

如果您仍然无法获得帮助,请通知我,我可以直接与PayPal的某些联系人联系。

答案 1 :(得分:1)

好的,我有更新(有点)。我们收到PayPal MTS的回复,告诉我们在调用SUBJECT时添加DoAuthorization字段,并使用与PAYMENTREQUEST_0_SELLERPAYPALACCOUNTID相同的值填充,这基本上是卖家的PayPal电子邮件地址。我们这样做了,这次我们从DoAuthorization API获得以下回复:

[ERRORS] => Array
    (
        [0] => Array
            (
                [L_ERRORCODE] => 10002
                [L_SHORTMESSAGE] => Authentication/Authorization Failed
                [L_LONGMESSAGE] => You do not have permissions to make this API call
                [L_SEVERITYCODE] => Error
            )

    )

因此错误代码从10007变为10002.现在我们仍在等待PayPal MTS的第二次响应,但与此同时我们缩小了问题范围,看来问题出在我们的API凭据(用户名,密码)和签名)。

基本上,我们使用我们的API凭据通过SetExpressCheckoutGetExpressCheckoutDetailsDoExpressCheckoutPayment来接收与DoAuthorization API一起使用的交易ID。现在,我们不是使用我们的API凭据(会失败)调用DoAuthorization,而是尝试从http://quar.me/paypal/api/nvp/doauthorization调用它(使用本网站上的API凭据)。令我们惊讶的是,它成功了,并且交易已被授权(后来被捕获)成功。然后我们将来自该网站的API凭证复制到我们的应用程序以验证它是否有效,我可以确认它。

我们现在第一次感到困惑。当我们收到PayPal MTS的回复时,我会更新这个答案。与此同时,如果有人知道出了什么问题,请随时回复。

更新[21-01-2014]

我们得到了PayPal MTS家伙的回复。这个问题有些奇怪;要调用DoAuthorization/DoVoid/DoCapture等API调用,卖家需要向API用户名授予Auth/capture权限。好吧,让我们说这是正常的。

奇怪的是:

  1. 文档中没有提到为这些API调用请求权限的必要性。
  2. 如果需要向卖家授予权限,那么如何找到API凭据here,而无需请求Auth/capture权限?我们甚至已成功使用我们的API凭据生成transaction ID,然后使用上述网站的API凭据授权付款。
  3. 更新[22-01-2014]

    好的,我们已经用PayPal MTS解决了这个问题。收回这些错误的原因是每个卖家都需要授予我们的API用户名权限,以便我们能够授权/捕获付款。这些可以通过卖方手动授予权限,也可以通过权限API实现。

相关问题