Paypal数字商品使用startFlow方法动态物品清单?

时间:2012-12-13 19:01:43

标签: paypal express-checkout digital paypal-digital-goods

我仍然试图给同一只猫皮肤涂抹:Controlling order of javascript execution PayPal Objects

简而言之,我有一个购买数字歌曲的数据库。我希望有一个不断变化的列表,比如购买50首歌曲。

Paypal的文档非常糟糕IMO。并且示例 - 每个人 - 似乎都需要硬编码您想要销售的元素(按钮)的ID,因为您需要页面页脚中的脚本来实际“触发”对PayPal的调用

<script type="text/javascript">
  var embeddedPPFlow1 = new PAYPAL.apps.DGFlow( {trigger : 'buysong_1'});
</script>

...所以,如果您有50个“购买”按钮,则需要在加载时在页脚中声明50个PAYPAL.apps.DGFlow对象,当然它们必须具有正确的ID。这使得从数据库中提取不同的项目有点棘手(更不用说制作非常繁重的页面了。)

PayPal文档表明应该能够通过使用单个对象但使用URL和startFlow方法而不是触发器来解决这个问题,但是在他们的站点上没有示例,我在interweb上找不到工作示例

embeddedPPFlow = new PAYPAL.apps.DGFlow();
// url = (paypal url?)
this.embeddedPPFlow.startFlow(url);

但是我没有得到URL应该是什么...是来自PayPal的令牌吗?如果是这样,那么如何获得令牌 - 前呼叫PayPal NVP?

简而言之:是 - 某人 - 有一个这样的工作示例,或者知道如何将startFlow与动态分配的购买按钮一起使用?我试过在X开发者论坛上发帖并没有回复。

1 个答案:

答案 0 :(得分:2)

我在搜索同样的事情时偶然发现了你的问题,并找到了对我有用的答案,我希望这有帮助....

网址是您要在灯箱内调用的位置。它取决于您使用的API(和SDK)。就我而言,我正在使用Merchant API SDK。 https://github.com/paypal/merchant-sdk-php

SDK内部是一个文件DGsetExpressCheckout.php,文件底部是url:

https://www.sandbox.paypal.com/incontext?token=$token

我不确定“不文字”部分是什么意思,但当我使用该链接时(以及最后的令牌),PayPal想出了一些事情并指示:

https://www.sandbox.paypal.com/webapps/checkout/webflow/sparta/expresscheckoutvalidatedataflow?execution=e1s3

允许登录和其余付款流程。

我的JavaScript看起来像这样(使用jQuery):

//setup the PayPal digital goods flow
var dg = new PAYPAL.apps.DGFlow({
  //don't trigger the flow with a button (we're going to submit manually)
  trigger: null
}),
//post object for payment
post = {
  amount: '1.00',
  currencyId: 'USD'
  //.... whatever else you need to pass to $_POST ....
};
//process checkout
$.post("/url/to/your/sdk/method", post, function(token) {
  //if successful...
  if ( token ) {
    //direct the dialog box for our digital goods pay flow to the correct place
    var flowUrl = 'https://www.sandbox.paypal.com/incontext?token='+token;
    dg.startFlow( flowUrl );
  }
});

您可能需要根据您的情况调整SDK。您还必须确保在DGdoExpressCheckout.php内部执行操作,该操作应设置为在支付流后运行的returnUrl,此时您运行:

dg.closeFlow(); 

关闭对话框并重叠。