🧙‍

施国鹏(seth-shi)的博客

当神不再是我们的信仰,那么信仰自己吧,努力让自己变好,不辜负自己的信仰!

Featured image of post 连续包月-周期扣款-自动续费业务整理总结

连续包月-周期扣款-自动续费业务整理总结

连续包月会员是很多 APP 常用的功能, 这里整理总结一下开发流程

开篇

连续包月-周期扣款-自动续费名字很多, 先简单解释这三个的意思:

  • 支付宝官方定义的名称为-周期扣款
  • 连续包月是这个模式常用的行为(也可以包天, 包季度),
  • 自动续费是在用户的眼里行为, 可以不用手动付款

扣款场景

周期扣款有两种模式:

  • 先签约后代扣场景

    • 先跳转到签约页面
    • 用户同意签约
    • 支付宝签约异步回调 && 同步发起扣款
  • 支付后签约场景

    • 跳转到支付页面(用户可以手动关闭自动续费)
    • 用户支付
    • 收到两个异步通知, 支付通知 + 签约通知
  • 支付后签约场景的模式虽然简单, 但是用户可以手动关闭续费, 所以很多时候我们选择先签约后代扣场景


申请信息

签约页面唤起逻辑

  • 服务端根据SDK生成签名串(值的注意的https://github.com/go-pay/gopay 这个包没有实现这个功能 我提交了新功能并于2023-01-01合并https://github.com/go-pay/gopay/pull/295)
    • 这个SDK虽然包含了client.UserAgreementPageSign()方法, 但是这个方法实际上会请求支付宝返回一个H5页面唤醒签约页面(但是这个只能给前端使用)
    • 如果是APP签约,我们不能请求支付宝, 必须本地签名 (这里很坑, 支付宝API文档没写,需要在接入指南查看)
    • 官方提供SDK的代码示例如下(如果是PHP,Java,Node可以直接用官方SDK)
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayUserAgreementPageSignRequest request = new AlipayUserAgreementPageSignRequest();
request.setBizContent(参考上面的bizContent值);
//无线端唤起签约
//pageExecute get方式,生成url
AlipayUserAgreementPageSignResponse response = alipayClient.pageExecute(request,"get");

//生成的url地址去除http://openapi.alipay.com/gateway.do
signParams = response.replace("http://openapi.alipay.com/gateway.do?","");

//生成唤起客户端。把signParams使用 UTF-8 字符集整体做一次 encode
return 'alipays://platformapi/startapp?appId=60000157&appClearTop=false&startMultApp=YES&sign_params='+ encode(signParams)

开发

  • 由于我使用的是Go, 所以使用这个包 https://github.com/go-pay/gopay
  • 值的注意的是, 当前日期2022-12-29由于支付宝V3是还不支持周期扣款的, 所以我们需要用V2
  • 首先基于表设计, 这边大致如下(省略部分)
id, no(订单号), tarde_no(商户订单号), user_id(用户), goods_id(商品), contract_code(自定义签约号), contract_id(商户签约号)

订单流程

  • 用户下单连续包月产品时候, 创建订单, 订单包含一个随机的contract_code
  • 调用生成签约参数时, 把contract_code当做商户签约号参数生成唤醒签约页面链接签名
  • 下发订单号no和支付宝唤醒签约页面链接给客户端, 客户端唤醒支付宝签约页面
  • 签约成功之后,异步通知回调会把contract_codecontract_id返回给我们(插入签约表)
  • 通过contract_code查找到订单, 然后调用支付接口alipay.trade.pay(同步调用),实时获取是否扣费成功
  • 客户端返回的时候, 根据订单号no调用服务端, 如果订单未支付, 服务端再去主动扣款一次
  • 增加定时任务, 定时查询签约表,找到五天内到期的调用同步支付接口

备注

  • 微信连续包月提前两天扣款
    • 比如15号签约, 那么应该13号发起扣款, 14号是微信扣款等待期, 15号微信下发扣款通知(成功还是失败)
  • 支付宝连续包月提前五天扣款
    • 比如15号签约, 那么可以10号发起扣款
本作品采用 知识共享署名 4.0 国际许可协议进行许可,转载时请注明原文链接,图片在使用时请保留全部内容,可适当缩放并在引用处附上图片所在的文章链接。

相关文章

桂ICP备16006604号-1
Built with Hugo
Theme Stack designed by Jimmy

PHP网站源码鹰潭网站推广系统报价沙井模板网站建设多少钱山南网页制作推荐无锡SEO按天扣费公司盐田优秀网站设计推荐宿迁网站seo优化迁安企业网站设计公司林芝如何制作网站多少钱泉州设计公司网站推荐吕梁企业网站制作成都百搜标王哪家好宝安高端网站设计公司哈尔滨seo网站推广多少钱铜川网站建设哪家好江门网站优化按天计费价格鸡西营销型网站建设多少钱朔州网站制作推荐秦皇岛seo推荐哈尔滨建网站报价兰州关键词排名哪家好呼和浩特seo网站推广哪家好鸡西百姓网标王推广公司潜江seo网站推广多少钱东莞模板网站建设公司南平SEO按天扣费哪家好汉中seo排名丽水英文网站建设价格拉萨网站优化软件哪家好长治网站关键词优化价格永州优化哪家好歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化