- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
长话短说,我相信我已经正确地实现了流程,但在最终的 DoExpressCheckoutPayment 上我得到:
ACK => SuccessWithWarning
L_ERRORCODE0 => 11607
L_SHORTMESSAGE0 => Duplicate Request
L_LONGMESSAGE0 => A successful transaction has already been completed for this token
这仅仅是因为我在此之前正在执行 GetExpressCheckoutDetails 请求吗? (GetExpressCheckoutDetails ACK 是“成功”)
请注意,从 DoExpressCheckoutPayment 返回的其他数据看起来不错:
PAYMENTINFO_0_PAYMENTSTATUS => Completed
PAYMENTINFO_0_ACK => Success
我是否应该只查找 PAYMENTINFO_0_ACK 而忽略其余部分?
旁注 - 如果有兴趣,我正在使用 PHP 库 https://github.com/thenbrent/paypal-digital-goods尽管我将示例 return.php 中的内容更改为新类上的 GetExpressCheckoutDetails,因为当然,每次都使用相同的购买数据是没有意义的,而且它必须是动态的
编辑: 好吧,我很困惑。如果我仅调用 GetExpressCheckoutDetails,则响应为:
CHECKOUTSTATUS => PaymentActionNotInitiated
但是,如果我调用 GetExpressCheckoutDetails,然后调用 DoExpressCheckoutPayment,前面的 GetExpressCheckoutDetails 的响应将变为:
CHECKOUTSTATUS => PaymentActionCompleted
(由此可见后续DoExpressCheckoutPayment的结果出现Duplicate Request的错误)
这有什么意义?! Vanilla PHP 刚刚变得异步了吗? paypal拨够钱买时光机了吗?我可能遗漏了一些非常基本的东西,但我真的还没有看到它:\
编辑 2 一些示例代码(没有将其剥离以使其成为 100% Vanilla ,但应该非常简单):
public static function completePaypalPurchase() {
self::configurePaypal(''); // Not relevent, just some setting of API keys and stuff
$paypalAPI = new PayPal_Purchase(); // Just to get purchase info so we can form the real purchase request
$response = $paypalAPI->get_checkout_details(); // Uses token from GET automatically
echo("RESPONSE FROM GET CHECKOUT");
print_r($response);
$ack = strtoupper($response['ACK']);
$userID = (int)$response['CUSTOM']; // This was passed earlier and is retrieved correctly
$numCredits = (int)$response['L_QTY0'];
//NOTE: If I comment out the below, then the $response above has CHECKOUTSTATUS => PaymentActionNotInitiated
// BUT If I do not comment it out, leaving it as-is then the $response above has CHECKOUTSTATUS => PaymentActionCompleted
// That's the core of the problem and where I'm stuck
if($ack == "SUCCESS" && $numCredits && $userID && $userID == $loggedInUserID) {
$paypalAPI = self::getPaypalPurchaseCredits($userID, $numCredits); // This creates a new PayPal_Purchase() with this info. In fact, it's the same method and therefore should return the same sort of object as the one used at the beginning of the flow
$response = $paypalAPI->process_payment();
$ack = strtoupper($response['ACK']);
echo("RESPONSE FROM DO PAYMENT");
print_r($response);
if(isset($response['PAYMENTINFO_0_TRANSACTIONID']) && $ack == "SUCCESS") {
$transactionID = $response['PAYMENTINFO_0_TRANSACTIONID'];
return(new APIReturn(true, array('ack'=>$ack, 'userid'=>$userID, 'numcredits'=>$numCredits, 'transactionid'=>$transactionID)));
}
}
return(new APIReturn(false, self::ERROR_NORESULT));
}
最佳答案
调用的正确顺序是 SetExpressCheckout、GetExpressCheckoutDetails,然后是 DoExpressCheckoutPayment。如果您收到重复订单错误,那么您必须以某种方式两次调用 DECP。您需要单步执行您的代码并确切地了解它是如何发生的。它可能是您正在使用的类(class)中的东西。
关于这一点,您可能有兴趣参加 look at my class反而。它使一切变得非常简单,因为它将所有内容都转换为 PHP 数组并为您处理繁重的工作。
但是,如果您不想使用新类重新开始,那么您需要逐步检查代码中发生的情况,并通过类方法查看它在哪里被发布了两次。
我注意到的另一件事是您只检查 ACK = Success。这意味着当 ACK = SuccessWithWarning 时,它将被视为失败。您需要同时处理 Success 和 SuccessWithWarning(一个体面的类库会为您处理。)
抱歉,我没有更明确的答案,但同样,在您的代码或库中的某处,它必须被发布两次。您是否在记录原始 API 请求和响应?如果是这样,您将能够确认它被击中了两次,因为您记录了 2 组 DECP 请求和响应。
关于php - DoExpressCheckoutPayment(数字商品结账 express )中的重复请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20528689/
假设我正在使用 DoExpressCheckoutPayment 完成付款,并且在 PAYMENTINFO_0_PAYMENTSTATUS 中收到了 Completed 以外的状态(例如 - Pend
当我访问 Doexpresscheckoutpayment 服务时出现以下错误。 错误:支付未被用户授权错误代码:10485 请帮助我,我无法弄清楚出了什么问题。 以下是我遵循的步骤: 1) setE
我们在一个有故障的大型网站上使用 PayPal,集成向导中的所有代码助手的集成都很顺利。现在我们在上线的第一天就处理了一些交易,但一小部分 (5%) 基本上是由 PayPal 处理的交易,但我们的系统
我目前正在处理一些 PayPal 代码,我遇到了一个问题,即 DoExpressCheckoutPayment 有时似乎没有返回 PAYMENTINFO_0_PAYMENTSTATUS 的值。 目前我
在我们执行 DoExpressCheckoutPayment 之后 - 导致支付状态为 Completed 或失败并出现其他状态 - 是否有任何从 PayPal 发送的 IPN? 最佳答案 是的,DE
TL;DR 我从哪里获取 PAYERID 以传递给 DoExpressCheckoutPayment 调用? 我正在尝试为 ExpressCheckout 的整个授权和捕获过程创建一个自动化测试套件(
我是 PayPal API 的新手。我在调用 DoExpressCheckoutPayment 时遇到错误。错误是 11623 “此帐户未被批准用于授权服务。”。沙盒帐户无法使用并需要一些额外的非显而
我想在不更改代码的情况下测试 DoExpressCheckoutPayment(否则我并不是在真正测试正确的代码)。看来我需要将 token 设置为某个错误代码,但这意味着更改代码,因此在我看来这不是
如果客户在通过 Paypal.com 结帐页面付款时使用信用卡而不是 Paypal 帐户,GetExpressCheckoutDetails 和 DoExpressCheckoutPayment 是否
使用经典的 PayPal API 时,未调用 DoExpressCheckoutPayment 的快速结账交易会怎样? 例如,如果用户通过成功调用 SetExpressCheckout 被转到 Pay
在实际环境中,我们看到来自 DoExpressCheckoutPayment 的响应,其中 PaymentStatus 为 None/Null。响应将 Ack 设置为 Success,因此这通常意味着
这不是一个编码问题,但我想了解发生了什么。这是我第一次不得不集成 PayPal,所以我使用了沙盒环境和带有硬编码值的简单示例来开始。 对于 SetExpressCheckoutRequest,假定支付
我无法从 doexpresscheckoutpayment 的回复中获取交易 ID 和其他信息,我花了几个晚上阅读,但我要么不明白发生了什么,要么我在某些地方出错了 这里是一些代码 funct
我在通过 DoExpressCheckoutPayment 方法获取 Paypal 付款时遇到问题。 Paypal 失败并仅返回一个 10004 错误,上面写着 Transaction refused
长话短说,我相信我已经正确地实现了流程,但在最终的 DoExpressCheckoutPayment 上我得到: ACK => SuccessWithWarning L_ERRORCODE0 =>
我开始使用 PayPal,我的第一项工作是在我们的网站上调试它。 实际上,当我们到达订单末尾时,它工作正常,但我们在日志中得到一个堆栈:“无效 token (#10410:无效 token )”。当调
当我将 PayPal 与我的沙盒测试帐户集成时,我通过 DoExpressCheckoutPayment API 调用或 PayPal 的新 /execute REST 调用创建的所有交易都处于待处理
我正在尝试构建一个非常简单的支持 paypal 的购物车,以便用户可以购买多件商品。我希望 Paypal 处理所有付款细节。我什至不想要订单确认。我将在 paypal 上手动检查订单确认。 起初我想使
我们使用 DoExpressCheckoutPayment API 函数进行支付授权。 DoExpressCheckoutPayment 响应具有 ReceiptID 字段,如果付款是从 Paypal
我正在尝试让最简单的 Express Checkout 版本在 PHP 中运行。 我的购物篮有一个按钮,可将用户发送到结帐向导提供的名为 expresscheckout.php 的脚本。 在返回 UR
我是一名优秀的程序员,十分优秀!