官方给出的自动续费分五步 Intergrate Subscriptions。实际开发中,还需要实现支付结果处理和订阅管理等:

  1. 事先创建计划,并激活;
  2. 用户创建订阅,跳转到paypal网站等待用户同意;
  3. 用户同意后,跳转回网站,执行订阅;
  4. 获取用户账单,包括每次扣款结果通知的接收或支付结果的主动查询;
  5. 处理用户取消订阅等通知。

使用 Palpal SDK

composer require paypal/rest-api-sdk-php

官方有完整的 Samples;

可以通过 Paypal Sandbox 方便的进行调试。

创建订阅计划并激活

  • 订阅计划(Billing Plan)等同于的产品,需要为每个商品不同价格创建不同的计划。不过可以针对不同用户在创建协议时更改;
  • Payment 中创建 TRIAL 类型支付时,也必须存在 REGULAR 的支付。TRAIL 并不能自动判断是否为新用户等条件,所以新用户首次的优惠需要业务代码自己实现。
  • 由于创建用户订阅协议时,协议生效时间必须在当前时间24小时以后,所以循环扣款的设置无法立刻扣款,最早也需要24小时。一般业务需要立刻进行首次扣款,可以用 MerchantPreferences 的 setSetupFee 来设置首次扣款的费用;
  • Paypal SDK 会报错 "NotifyUrl" value is NULL,该错误为 Paypal 服务端错误,但官方未修复,解决办法见 issue。

创建订阅

  • 用户可以创建针对同一订阅计划的多个订阅协议(Billing Agreement),创建后跳转至 Paypal 网站等待用户同意协议;

  • 因协议开始时间 start_date 最早为当前时间24小时之后,所以该值实际上设置的是第二次扣款时间。所以,若设置按月付款,start_date 需要设置成一个月以后,然后通过设置 setSetupFee 价格来设置首次扣款费用;

  • 创建订阅后,还没有生成 Agreement.id,这时候需要从跳转链接中提取出 token 来使创建的订阅与用户同意后跳转的回来的协议信息相对应。

$link = $agreement->getApprovalLink();
parse_str(parse_url($link, PHP_URL_QUERY), $params);
$token = $params['token'];
  •  

执行订阅

  • 同一个订阅计划可以被同一个用户多次订阅。所以根据需要,需要在执行新协议时,手动取消该用户之前的协议;
  • 实际扣款时间有延迟,每次循环扣款执行的时间,都会比AgreementDetail.next显示的时间晚几个小时。所以为保证连续性,可以设置提前一天扣款。

支付结果接收与查询

  • 可以在 My Apps -> REST API apps -> WEBHOOKS 设置 webhook 通知。当每次循环扣款成功时,Paypal 都会发送 PAYMENT.SALE.COMPLETED 的事件通知,可以通过其中的 billing_agreement_id 字段与已创建的订阅相匹配,找出对应付款的协议。
  • 每次 AgreementDetail 都会返回下次收款时间 next 参数。可以在超过这个时间后,通过 Agreement::searchTransactions 方法查询该协议的所有交易。需要注意的是,Paypal 实际的扣款时间一般都会延迟,所以需要多次重试。

用户订阅取消与删除等

  • 取消订阅会通过 webhook 发送 BILLING.SUBSCRIPTION.CANCELLED 通知,订阅暂停会发送 BILLING.SUBSCRIPTION.SUSPENDED 通知
  • 直接删除计划并不会自动删除基于该计划的协议,所以再删除计划前,需要手动取消所有订阅该计划的协议。

参考资料

https://developer.paypal.com/docs/subscriptions/

https://paypal.github.io/PayPal-PHP-SDK/sample/

https://www.cnblogs.com/pheye/p/6603126.html

https://bootell.net/2018/08/30/Paypay-Subscriptions-Integrate/

Paypal 实现自动订阅相关推荐

  1. python苹果支付(服务端)自动订阅版

    苹果支付分为沙盒环境和生产环境 苹果验单逻辑 苹果支付过程中离不开一个东西--receipt(凭证) 服务端接收APP发送的凭证 服务端拿着凭证到苹果的服务器验单(沙盒.生产) 服务端解析苹果服务器返 ...

  2. ios自动订阅服务器,iOS IAP - 自动续期订阅

    自动续期订阅是苹果推出的一项苹果内购服务,当用户在App Store订阅了某项服务后,App Store会在订阅时间快到期之前,自动扣费并帮用户续订该服务. 自动续期订阅的优势 创建自动续期订阅 1. ...

  3. IOS 自动订阅以及恢复购买

    <SKPaymentTransactionObserver,SKRequestDelegate,SKProductsRequestDelegate> - (BOOL)application ...

  4. iOS 自动订阅开发

    一.代码逻辑 关于iOS 订阅.自动订阅 本身功能开发很简单.跟正常的购买没什么大的差异.唯一需要特殊处理(自动订阅)的是, 在APP启动时候要增加侦听: [[SKPaymentQueue defau ...

  5. 【转载】Microsoft 365 E5邮件API调用自动订阅无限续订服务

    本文为转载文章,已获得原作者授权. 原文:E5 自动订阅程序[已开源] - 浅忆博客 链接:https://qyi.io/archives/687.html 如果你还没有申请到E5账号,请访问这篇文章 ...

  6. 微软e5服务器,微软E5 自动订阅程序

    说明 此程序部署在我的服务器上,每隔2小时会自动调用outlook api 获取邮件列表 对于信息: 只会保存必要的 client_id.client_secret,其他任何内容都不会保存, 会读取授 ...

  7. 梅林 自动订阅_如何为4万名订阅者编写自动令牌空投脚本

    梅林 自动订阅 Dose Media在Unsplash上拍摄的照片 我很高兴地宣布,我最近加入了Polymath团队,担任Solidity Engineer,率先开发基于区块链的证券代币的新标准.

  8. iOS自动订阅商品(Auto-Renewable Subscriptions)相关处理

    来源:http://blog.csdn.net/xyxjn/article/details/17412453 由于网上有关自动订阅的信息较少,自己姑且整理一下目前接触到的信息,希望能够对一些朋友有所帮 ...

  9. iOS因“自动订阅”被拒N次,最终解决!!!

    最近看到很多产品要么被下架,要么遇到账号审查,十分惨烈.心悸之余,看到自家App风平浪静,不免有些偷偷开心.但是好景不长,没过几天我们就收到了一封来自Apple的被拒邮件,被拒原因是我们不符合auto ...

最新文章

  1. 7个提升PyTorch性能的技巧
  2. 不平等加剧与问责机制:纽约大学AI Now研究所2018 AI现状报告 | 报告
  3. 将论文中的所有参考文献编号批量上标化
  4. 蓝桥杯比赛常考算法_蓝桥杯总结-常用函数及算法
  5. web设计页面跳转的方法
  6. Microservices Reference Architecture - with Spring Boot, Spring Cloud and Netflix OSS--转
  7. 如何写一个脚本语言_零基础小白如何学会写文案?文案写作技巧之一:如何写一个吸引读者的文案开头...
  8. 云原生时代业务架构的变革:从单体迈向Serverless
  9. 【kafka】在 Kafka Streams 中启用 Exactly-Once
  10. 构建私有的 CA 机构
  11. 最少拍控制系统设计(一)-- 最少拍无纹波系统的设计方法
  12. html div边框添加文字,css通过text-shadow给文字加边框!
  13. 数据导入阿里云mysql_mysql数据库数据导入
  14. “自学IT能走多远”
  15. OO第二单元电梯作业总结
  16. git 交互式rebase
  17. cad重新加载php命令,cad无限缩小的命令是什么
  18. 洛谷P1339 Heat Wave G(最短路,图论)
  19. raid是什么?raid的工作原理分析及raid数据恢复思路
  20. Unity VR手柄发射射线

热门文章

  1. 3DMAX绘室内装修三维效果图
  2. 为什么很少有单片机机构?培训班一般多少费用?
  3. 筑龙网下载的文件格式是php_建筑工程竣工验收资料填报指南(范本)
  4. 房产“去库存”释放需求 集成灶市场待挖掘
  5. 结构化数据和非结构化数据有何区别?
  6. 【计算机网络 一 概述】
  7. 新华文娱数据发布年度白皮书 口碑成观影首要驱动力
  8. codecombat 代码攻略
  9. 自动采购订单 Auto PO
  10. 根据离散傅里叶变换对ECG信号进行频谱分析