【问题标题】:Paypal shipment detailsPaypal 发货详情
【发布时间】:2012-10-27 20:19:42
【问题描述】:

我正在使用 PayPal 自适应支付(链式支付)。

如果我设置: 1. 创建付款 2.在SetPaymentOptions -> Requires shipping address selection = true 3.当我为 https://www.sandbox.paypal.com/webscr&cmd=_ap-payment&paykey=[PA KEY] 用户重定向用户身份验证后没有显示任何送货地址提示

为什么?

据此

https://www.x.com/developers/paypal/documentation-tools/api/pay-api-operation

使用 CREATE 时,我应该这样做:CREATE - 使用此选项通过 SetPaymentOptions 设置付款指令,然后在稍后使用 ExecutePayment 执行付款。

但一旦我尝试运行 ExecutePayment,我就会得到以下信息:

此付款请求必须由发件人授权

那么我该如何设置其他付款方式?

【问题讨论】:

    标签: paypal paypal-sandbox paypal-adaptive-payments


    【解决方案1】:

    只有在您使用延迟链式付款时才会使用 ExecutePayment 调用。否则,只要买家登录并批准,付款仍然会发生,因此不需要 ExecutePayment。此时调用它会导致您收到错误,即支付密钥已被使用。

    【讨论】:

    • 我收到了 Paypal 的回复,他们说执行付款应该可以,但不能在沙箱中。由于某些奇怪的原因,这在沙盒中无法正常工作:)
    • 看起来您已经编辑了原始问题,所以我的回答现在看起来有点误导。当使用 CREATE 调用 Pay 时,您可以使用 SetPaymentOptions,但您仍然不需要 ExecutePayment,除非您正在处理延迟的链式付款。否则,一旦用户在 PayPal 页面上查看并提交订单,付款就会发生。
    • delayed 仅适用于下一个被链人延迟付款。
    • 我所需要的只是一个付款队列,我可以在任何时候一个一个地执行。所以我目前最好的选择是:1. 获得预先批准 2. 执行付款
    • 好的,在这种情况下,您仍然不需要延迟链式付款。您可以简单地使用 Preapproval API 为付款人创建一个配置文件,该配置文件将向您返回一个 PreapprovalKey。然后,当您拨打 Pay 电话时,您只需包含该 Preapproval 密钥。由于用户已经预先批准了付款,因此此时无需任何重定向即可进行付款。根据您的设置方式,您可以触发配置文件允许的尽可能多的付款。
    【解决方案2】:

    发件人是否真的授权付款? 流程应该是这样的:

    1. 使用actionType 作为 CREATE 调用 Pay API 操作
    2. 如果paymentExecStatus=CREATED 和ack=SUCCESS,则获取payKey(此处,将detailLevel=ReturnAll 保留在您的Pay API 请求的RequestEnvelope 字段中)
    3. 将用户重定向到 Paypal https://www.sandbox.paypal.com/webscr?cmd=_ap-payment&paykey=YOUR_PAYKEY_ABOVE
    4. 如果用户批准付款,您将被重定向到作为 Pay API 请求的一部分发送的 returnURL
    5. 使用 PaymentDetails API 操作验证批准状态
    6. 稍后您可以使用 ExecutePayment API 操作执行付款,因此在步骤 4 中设置。发送您在第 2 步中获得的 payKey

    您收到错误代码 550001,因为用户批准似乎尚未成功完成。这可能是由于: 应用程序未将用户/发件人重定向到 Paypal 以进行授权

    用户没有输入正确的登录信息

    没有足够的可用资金 等等

    【讨论】:

    • 感谢您的回答。 1.完成 2.完成 3.完成 4.完成 5.完成 6.钱已经在我的账户上了。如果我尝试执行付款,我会收到以下消息:payKey AP-xxxxx 已用于付款,那么 CREATE 用于什么?我仍然不知道如何让用户选择发货详情
    • 更奇怪的是,在 SDK 示例中,只有在满足以下条件时才提供执行付款选项: } else if(($_POST['preapprovalKey'] != null ) && ($_POST ['actionType'] == "CREATE") && ($response->paymentExecStatus == "CREATED" )) { 所以在 SDK 中与开发者部分中的 DOCS 完全不同
    • 关于您的第二条评论,请解释您如何发现您粘贴的代码部分 if(($_POST['preapprovalKey'] != null ) && ($_POST['actionType'] == "CREATE") && ($response->paymentExecStatus == "CREATED" )) 与文档不同?据我所知,它是正确的。
    • 关于第一条评论,尝试使用相同的 payKey 执行 PaymentDetails API,看看你在响应对象的 actionTypestatus 字段中得到了什么。
    • Zeeshan:关于 SDK 和 DOCS:在文档中,如果我们想使用 setpaymentoptions,应该使用 CREATE。虽然它没有说明任何关于预先批准的内容,但在这种情况下会进行检查。关于第一条评论:在用户接受之前:[actionType] => CREATE [status] => CREATED 接受之后:[actionType] => CREATE [status] => COMPLETED 所以现在唯一的问题是:我如何才能真正使用 ExecutePayment API ?
    猜你喜欢
    • 1970-01-01
    • 2017-10-16
    • 2014-07-20
    • 2015-02-20
    • 2013-02-13
    • 1970-01-01
    • 2017-02-17
    • 2017-02-08
    • 2012-08-30
    相关资源
    最近更新 更多