跳到主要内容

小程序支付流程

  • 开通微信支付功能,并获得了相应的商户号

  • 小程序支付流程需要使用企业账号,个人账号无法进行支付

  • 小程序发布之后,才能申请小程序支付

支付流程说明:​

开通微信支付功能,并获得了相应的商户号

  • 1、用户在小程序下单
  • 2、发送下单支付请求给商家服务器
  • 3、商家服务器与微信服务器进行对接,验证用户身份
  • 4、商家服务器生成对应的订单,将订单的信息返回给小程序
  • 5、在客户端调用支付API wx.requestPayment(),传递订单信息和支付参数
  • 6、微信服务器进行验证,返回支付结果给小程序客户端
  • 1、用户在小程序客户端下单(包含用户及商品信息)
  • 2、小程序客户端发送下单支付请求给商家服务器(商户系统后台)
  • 3、商家服务器同微信服务器进行对接,并验证用户的身份标识
    • 如唯一标识openID
    • openID是微信用户在当前小程序中的唯一标识
  • 4、商家服务器(商户系统后台)根据openId生成商品订单(包含商户信息)
    • 将订单信息保存在商户系统后台中。
  • 5、在商家服务器接收到用户下单请求后,需要向微信支付提供的统一 下单API发起请求,以获取预支付订单信息
    • 预支付订单是在用户发起支付请求之前生成的一个临时订单,包含了支付所需的必要信息
    • 预支付订单可以用于对订单信息进行签名和加密,确保订单数据的完整性和安全性
  • 6、商家对预支付信息签名加密后返回给小程序客户端
  • 7、用户确认支付(鉴权调起支付)
    • 【支付api】:wx.requestPayment()
  • 8、微信服务器返回支付结果给小程序客户端
  • 9、微信服务器推送支付结果给商家服务器端

支付应用场景​

确定支付方式:选择支持的支付方式,例如支付宝、微信支付、银联等

支付场景:

  • 小程序支付
  • H5支付 (扫码支付、跳转到app支付)

业务场景:

  • 商城、充值应用(会员、点券)、金融产品

技术难点:

  • 多平台支付对接(微信、支付宝、银联各家银行)
    • 每一家平台都有各自的标准规范

个人使用支付功能​

使用第三方平台

  • PayJS
    • 开通费300 + 手续费 + 服务费
  • PaysApi
    • 手续费 + 单笔费
  • PayBob
    • 开通费 + 手续费 + 服务费
  • xorpay
    • 开通费 + 手续费 + 服务费

第三方平台的费用是比较贵的....

企业注册流程​

  • 准备工作 (场地、人员、名称)

    • 场地: 办公地点

    • 名称: 企业名称

    • 人员:法人、监事

  • 提交资料、等待审核

  • 审核通过之后

  • 办理税务,公章、法人章、发票章、企业执照

    • 税务登记
  • 银行开户

支付方案、多支付渠道(个人、企业)使用技巧​

微信支付 vs 支付宝支付区别&特点​

常见的支付场景小程序APIv3及开发步骤​

小程序支付流程​

小程序支付准备工作(HTTPS、域名、企业认证)​

  1. HTTPS证书:在小程序支付过程中,必须使用HTTPS协议。因此,需要为你的域名申请有效的HTTPS证书。你可以从证书颁发机构(CA)购买证书,或使用免费的开放式证书颁发机构(例如Let’s Encrypt)获取证书。
  2. 域名备案:确保你的域名已经完成备案。备案是中国大陆地区使用小程序支付的必要条件。你需要在备案后,将备案信息设置到你的域名解析配置中。
  3. 域名配置与校验:在小程序后台的“开发设置”中,将你的域名添加到“request合法域名”列表中。同时,在“业务域名”中,设置支付接口的域名。配置完成后,需要进行域名校验。校验的目的是确保你对该域名的拥有权。
  4. 企业认证:进行小程序支付需要完成企业主体认证。在微信公众平台上,提交相应的企业认证材料,包括公司信息、法人身份证、工商注册信息等。完成认证后,你的小程序支付功能将得到激活。

支付流程对接​

  • 后端支付接口开发&支付流程对接

小程序支付调起与支付结果确认​

小程序订单结果​

  • 小程序订单结果:微信主动通知 + 商户订单主动查询

requestPayment具体使用​

  • 1、确保已经开通了微信支付功能,并获得了相应的商户号(mch_id)和密钥等信息

准备支付参数对象,包括以下字段

  • timeStamp:支付签名时间戳,需要转为字符串类型。
  • nonceStr:支付签名随机串。
  • package:统一下单接口返回的 prepay_id 参数值。
  • signType:签名算法,一般为MD5或HMAC-SHA256。
  • paySign:支付签名,由商户服务器根据支付参数和密钥生成。
js
wx.requestPayment({
timeStamp: '1589894761', // 支付签名时间戳,需要转为字符串类型。
nonceStr: '5K8264ILTKCH16CQ2502SI8ZNMTM67VS', // 支付签名随机串。
package: 'prepay_id=wx2017033010242291fcfe0db70013231072', // 统一下单接口返回的 prepay_id 参数值。
signType: 'MD5', // 签名算法,一般为MD5或HMAC-SHA256。
paySign: 'C380BEC2BFD727A4B6845133519F3AD6', // 支付签名,由商户服务器根据支付参数和密钥生成。
success: function(res) {
// 支付成功回调
console.log(res);
},
fail: function(res) {
// 支付失败回调
console.log(res);
}
});

支付参数对象如何获取?

  • 1、在商户服务器后端,调用统一下单接口,向微信支付服务器发起支付请求
  • 2、微信支付服务器接收到请求后,会生成预支付订单,并返回包含预支付交易会话标识(prepay_id)的响应结果给商户服务器。
  • 3、商户服务器接收到微信支付服务器的响应后,根据响应结果中的prepay_id等相关字段,生成支付参数对象。支付参数对象应包含以下字段

生成支付参数对象的过程需要商户服务器与微信支付服务器之间的交互

  • 并进行签名算法的计算和数据加密

虚拟支付​

ios不支持虚拟支付,

  • 虚拟支付 wx.requestVirtualPayment

场景​

  1. 虚拟商品购买:如游戏内虚拟道具、游戏点卡、虚拟礼物等,用户可以直接通过微信虚拟支付完成支付。
  2. 虚拟货币充值:如游戏币、积分、红包余额等,用户可以使用微信虚拟支付进行充值,方便快捷。
  3. 线上会员开通:如在线教育、在线健身等,用户可以使用微信虚拟支付开通会员服务。
  4. 应用内购买:如游戏道具、租车服务、购物卡等,用户可以直接通过微信虚拟支付完成支付。

微信wx.requestVirtualPayment虚拟支付适用于各种虚拟商品购买、虚拟货币充值、在线会员开通、应用内购买等场景,为用户提供方便快捷的支付方式,增加支付体验

如何解决在ios合规进行虚拟支付​

1、比如IOS手机完成下单,生成一笔订单记录,引导用户电脑完成支付

2、生成一笔订单,分享给安卓的手机完成支付,类似于经常在支付看到的,邀请好友支付

常见问题​

支付的开发流程,前端只需要调接口?​

对于前端而言

  • 1、支付页面

  • 2、调用支付接口

  • 3、处理支付结果

开发坑点​

  • 交易安全性(https)
  • 全流程日志
    • 后面出现交易的问题,可以方便进行回溯
  • 交易备案
  • 安全机制
    • 支付验证(短信、人脸、TouchID)