我试图围绕Paypals订阅的流程 .
我们的流程是:
1.)创建开票计划2.)激活开票计划3.)创建账单协议(使用激活的计划,将客户发送到paypal网址)4.)客户批准,返回我们的URL,使用提供的令牌执行
我遇到的问题是我似乎无法将步骤4中返回的任何id引用到前3个步骤中提供的任何内容 .
我一定是错过了什么,但我完全被遗忘了 . 在前面的步骤中,我找不到任何方式将执行的协议与任何内容联系起来 .
正如PayPal_Orcun所提到的,问题仍然悬而未决,并且正在贝宝内部得到解决,但与此同时,你可以在这里做些什么 .
https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-8DL20958WD398123E
在此处,复制令牌,并将其存储在数据库中 . 把它想象成一个独特的Id .
执行付款 . 当它回来时,paypal将重定向回一个这样的网址:
http://localhost/paypal/PayPal-PHP-SDK/sample/billing/ExecuteAgreement.php?success=true&token=EC-8DL20958WD398123E
如您所见,您可以在此处执行 $_GET['token'] 检索令牌,并与创建的令牌匹配 . 然后,您可以在执行成功时使用 ID 返回,并将令牌字段替换为新的ID字段 .
$_GET['token']
ID
我同意,这不是你所期望的,但它绝对允许你在 create 和 execute 之后连接协议 .
create
execute
希望这有帮助 .
以下是REST API计费方案和结算协议的工作原理(包括卷曲调用样本):
首先,请确保您的REST应用程序切换为订阅(您可以在https://developer.paypal.com/webapps/developer/applications/myapps上检查您的REST应用程序设置)
1-)创建开票计划
卷曲-k -v -H "Content-Type:application/json" -H "Authorization: Bearer ACCESS_TOKEN" -d '{ 893298 : 893299 , 893300 : 893301 , 893302 : 893303 , 893304 :[{ 893305 : 893306 , 893307 : 893308 , 893309 : 893310 , 893311 : 893312 , 893313 :{ 893314 : 893315 , 893316 : 893317 }, 893318 : 893319 , 893320 :[{ 893321 : 893322 , 893323 :{ 893324 : 893325 , 893326 : 893327 }},{ 893328 : 893329 , 893330 :{ 893331 : 893332 , 893333 : 893334 }}]}], 893335 :{ 893336 :{ 893337 : 893338 , 893339 : 893340 }, 893341 : 893342 , 893343 : 893344 , 893345 : 893346 , 893347 : 893348 , 893349 : 893350 }}' https://api.sandbox.paypal.com/v1/payments/billing-plans
PayPal将返回以“P-”开头的结算方案ID
2-)激活开票计划
卷曲-k -v -H "Content-Type:application/json" -H "Authorization: Bearer ACCESS_TOKEN" -d '[{ 893355 : 893356 , 893357 :, 893360 : 893361 }]' https://api.sandbox.paypal.com/v1/payments/billing-plans/
3-)创建账单协议
卷曲-k -v -H "Content-Type:application/json" -H "Authorization: Bearer ACCESS_TOKEN" -d '{ 893366 : 893367 , 893368 : 893369 , 893370 : 893371 , 893372 :, 893375 :, 893378 :{ 893379 : 893380 , 893381 : 893382 , 893383 : 893384 , 893385 : 893386 , 893387 : 893388 }}' https://api.sandbox.paypal.com/v1/payments/billing-agreements
PayPal将返回带有EC令牌的Express Checkout重定向URL . 例如 . https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxxxxxxxxxxxxxxxx
您需要通过该URL将您的客户重定向到PayPal . 一旦授权了结算协议,客户就会返回到您的站点(步骤1中的return_url) .
4-)执行账单协议
卷曲-k -v -H "Content-Type:application/json" -H "Authorization: Bearer ACCESS_TOKEN" -d '{}' https://api.sandbox.paypal.com/v1/payments/billing-agreements/EC-TOKEN_HERE/agreement-execute
我用于同一问题的解决方案是在结算协议上设置 override_merchant_preferences ,其中 return_url 在查询中包含用户ID,如 www.domain.com/api/handler.php?uid=42&action=return .
override_merchant_preferences
return_url
www.domain.com/api/handler.php?uid=42&action=return
3 回答
正如PayPal_Orcun所提到的,问题仍然悬而未决,并且正在贝宝内部得到解决,但与此同时,你可以在这里做些什么 .
https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-8DL20958WD398123E
在此处,复制令牌,并将其存储在数据库中 . 把它想象成一个独特的Id .
执行付款 . 当它回来时,paypal将重定向回一个这样的网址:
http://localhost/paypal/PayPal-PHP-SDK/sample/billing/ExecuteAgreement.php?success=true&token=EC-8DL20958WD398123E
如您所见,您可以在此处执行
$_GET['token']
检索令牌,并与创建的令牌匹配 . 然后,您可以在执行成功时使用ID
返回,并将令牌字段替换为新的ID字段 .我同意,这不是你所期望的,但它绝对允许你在
create
和execute
之后连接协议 .希望这有帮助 .
以下是REST API计费方案和结算协议的工作原理(包括卷曲调用样本):
首先,请确保您的REST应用程序切换为订阅(您可以在https://developer.paypal.com/webapps/developer/applications/myapps上检查您的REST应用程序设置)
1-)创建开票计划
卷曲-k -v -H "Content-Type:application/json" -H "Authorization: Bearer ACCESS_TOKEN" -d '{ 893298 : 893299 , 893300 : 893301 , 893302 : 893303 , 893304 :[{ 893305 : 893306 , 893307 : 893308 , 893309 : 893310 , 893311 : 893312 , 893313 :{ 893314 : 893315 , 893316 : 893317 }, 893318 : 893319 , 893320 :[{ 893321 : 893322 , 893323 :{ 893324 : 893325 , 893326 : 893327 }},{ 893328 : 893329 , 893330 :{ 893331 : 893332 , 893333 : 893334 }}]}], 893335 :{ 893336 :{ 893337 : 893338 , 893339 : 893340 }, 893341 : 893342 , 893343 : 893344 , 893345 : 893346 , 893347 : 893348 , 893349 : 893350 }}' https://api.sandbox.paypal.com/v1/payments/billing-plans
PayPal将返回以“P-”开头的结算方案ID
2-)激活开票计划
卷曲-k -v -H "Content-Type:application/json" -H "Authorization: Bearer ACCESS_TOKEN" -d '[{ 893355 : 893356 , 893357 :, 893360 : 893361 }]' https://api.sandbox.paypal.com/v1/payments/billing-plans/
3-)创建账单协议
卷曲-k -v -H "Content-Type:application/json" -H "Authorization: Bearer ACCESS_TOKEN" -d '{ 893366 : 893367 , 893368 : 893369 , 893370 : 893371 , 893372 :, 893375 :, 893378 :{ 893379 : 893380 , 893381 : 893382 , 893383 : 893384 , 893385 : 893386 , 893387 : 893388 }}' https://api.sandbox.paypal.com/v1/payments/billing-agreements
PayPal将返回带有EC令牌的Express Checkout重定向URL . 例如 . https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxxxxxxxxxxxxxxxx
您需要通过该URL将您的客户重定向到PayPal . 一旦授权了结算协议,客户就会返回到您的站点(步骤1中的return_url) .
4-)执行账单协议
卷曲-k -v -H "Content-Type:application/json" -H "Authorization: Bearer ACCESS_TOKEN" -d '{}' https://api.sandbox.paypal.com/v1/payments/billing-agreements/EC-TOKEN_HERE/agreement-execute
我用于同一问题的解决方案是在结算协议上设置
override_merchant_preferences
,其中return_url
在查询中包含用户ID,如www.domain.com/api/handler.php?uid=42&action=return
.