亚马逊支付与 Javascript 和 PHP 的集成 - PaymentPlanNotSet

Posted

技术标签:

【中文标题】亚马逊支付与 Javascript 和 PHP 的集成 - PaymentPlanNotSet【英文标题】:Integration of Amazon Payments with Javascript and PHP - PaymentPlanNotSet 【发布时间】:2018-10-19 11:51:01 【问题描述】:

目前我尝试整合亚马逊支付。 我想显示使用以下功能创建的按钮:

OffAmazonPayments.Button("AmazonPayButton", myAmznMerchantID

在用户登录后,我想在同一页面上显示 AdressBook 小部件和支付小部件。 按钮和小部件显示正确,但当我尝试确认付款时,我收到错误约束消息:

PaymentPlanNotSet 买家无法选择付款 给定订单参考的方法。

但选择了付款。

我希望你能帮助我,找出我在这段 javascript 代码中的失败:

window.onAmazonLoginReady = function () 
    amazon.Login.setClientId(myAmznClientID);
;
window.onAmazonPaymentsReady = function() 
    var __accessToken       = 0;
    var __orderReferenceId  = 0;

    show_amazon_Button();

    function show_amazon_Button() 
        OffAmazonPayments.Button("AmazonPayButton", ibuiAmazonPaymentsInfos.ibAmznMerchantID, 
            type: "PwA",
            color: "Gold",
            size: "small", // "medium",
            language: "de-DE",
            authorization: function () 
                loginOptions =  scope: "profile:user_id", popup: true ;
                authRequest = amazon.Login.authorize(loginOptions, function(response) 
                    if (response.error) 
                        //show Error
                        return;
                     else 
                        __accessToken = response.access_token;
                        show_Adress_Widget();
                    
                );
            ,
            onError: function(error) 
                //handleError
            
        ); 
    

    function show_Adress_Widget() 
        new OffAmazonPayments.Widgets.AddressBook(
            sellerId: ibuiAmazonPaymentsInfos.ibAmznMerchantID,
            onOrderReferenceCreate: function (orderReference) 
                __orderReferenceId = orderReference.getAmazonOrderReferenceId();
                //do Stuff
            ,
            onAddressSelect: function (orderReference)  
                show_Amazon_Wallet();
            ,
            design: 
                designMode: 'responsive'
            ,
            onError: function (error) 
                //handle Error
            
        ).bind("readOnlyAddressBookWidgetDiv");                
    

    function show_Amazon_Wallet() 
        new OffAmazonPayments.Widgets.Wallet(
            sellerId: myAmznMerchantID,
            onOrderReferenceCreate: function(orderReference) 
                //do Stuff
            ,
            design: 
                designMode: 'responsive'
            ,
            onPaymentSelect: function(orderReference) 
                //activate buy button
            ,
            onError: function(error) 
                //handle error
            
        ).bind('AmazonWalletWidgetDiv');               
    
 //onAmazonPaymentsReady

php 中,我创建了 OrderReference:

$params = array(
    'order_reference_id' => $orderReferenceId,
    'amount'            => $amount,
    'seller_order_id'   => $buchungsKopf->getBuchung_nr(),
);
$responseObject = $client->setOrderReferenceDetails($params);

即使我之前选择了一种付款方式,我也会在 responseObject 中获得“PaymentPlanNotSet”。 同样的错误,当我尝试确认 orderReference 时

$responseObject2    = $client->confirmOrderReference($params);

在我集成 AdressWidget 之前,我可以进行付款。 你能看出我做错了什么吗?

【问题讨论】:

Payment Plan 是否与 Payment Method 相同?对我来说,它们意味着两种不同的东西 是的,亚马逊的错误代码是“PaymentPlanNotSet”。但正如消息文本所说,它们意味着缺少付款方式。 所以,消息实际上是说“他们的意思是缺少付款方式” 错误代码“PaymentPlanNotSet”的定义是:“买家没有为给定的订单参考设置付款方式。”亚马逊描述的解决方案是:“向买家展示亚马逊钱包小部件以收集付款信息。”但是我显示了 Wallet 小部件,买家可以选择他的付款方式。所以我的 Wallet 小部件的实现一定有问题。 【参考方案1】:

看来我发现了我的失败。 当我想在同一页面上显示两个小部件(地址和钱包)时,我不能使用 OffAmazonPayments.Widget.Wallet 中的 onOrderReferenceCreate-Method。 看起来它创建了一个新的订单参考,这与 AdressBook 小部件创建的订单参考不同。

现在我已经删除了 Wallet Widget 的这一部分,一切似乎都正常。

【讨论】:

我不明白:你删除了钱包小部件的哪一部分?谢谢

以上是关于亚马逊支付与 Javascript 和 PHP 的集成 - PaymentPlanNotSet的主要内容,如果未能解决你的问题,请参考以下文章

亚马逊简单支付IPN

Chargify 与亚马逊、谷歌和 PayPal 的支付服务对比?

如何从与亚马逊支付的反应中获取“checkoutSessionId”

PayPal 自适应支付 API - 延迟链支付(PHP、JavaScript)

系统设计 - 亚马逊产品结帐流程

亚马逊支付动态按钮签名被忽略?