php如何实现微信小程序支付及退款

一. 支付

支付主要分为几个步骤:

前端携带支付需要的数据(商品id,购买数量等)发起支付请求

前端进行支付动作

1. 前端请求支付

后端接收到前端发送的支付请求后,可以进行一下相关验证,例如判断一下用户有没有问题,支付金额对不对等等。

小程序 appid。写小程序的大概没有不知道这个的。。。

用户标识 openid。也就是用户的小程序标识,在我上篇博客中说明了如何获取。

商户订单号 out_trade_no 。商户为这次支付生成的订单号

总金额 total_fee 。订单总金额,很重要的一点是单位是分,要特别注意。

商品信息 Body。类似"腾讯-游戏"这种格式

终端IP地址 spbill_create_ip 。终端地址IP,也就是请求支付的 IP 地址。

签名 sign 。使用上面的所有参数进行相应处理加密生成签名。(具体处理方式可见下文代码,可直接复用。)

appid 不需多说

timeStamp 当前时间戳

nonceStr 随机字符串

package 就是上面提到的 prepay_id,不过切记格式如 “prepay_id= prepay_id_item“。否则会导致错误。

signType 加密方式,一般应该是 MD5

paySign 对以上数据进行相应处理并加密。

到这里,后端的支付接口已经完成了接收前端支付请求,并返回了前端支付所需数据的功能。

4. 前端发起支付

前端在接收到返回数据后,使用 wx.requestPayment() 来请求发起支付。此 API 需要的对象参数各项值就是我们上一步返回的各个数据。

二.退款

小程序退款的流程和付款相似,但有一些细节上的不同。

首先退款的步骤通常如下:

值得注意的有以下两点:

下面讲解一下退款的具体步骤

一. 用户发起退款请求

用户在前端发起退款请求,后端接收到退款请求,将相应订单标记为申请退款,展示在后台.商户查看后,如果同意退款再进行相应操作.此后才进入真正的退款流程.

二. 商户发起退款请求

小程序 appid。

商户订单号 out_trade_no 。退款订单在支付时生成的订单号

退款订单号 out_refund_no 。由后端生成的退款单号,需要保证唯一,因为多个同样的退款单号只会退款一次。

总金额 total_fee 。订单总金额,单位为分。

退款金额 refund_fee 需要退款的金额,单位同样为分

操作员 op_user_id .与商户号相同即可

随机字符串 nonce_str 。同支付请求

签名 sign 。使用上面的所有参数进行相应处理加密生成签名。(具体处理方式与支付相同,可直接复用。)

三. 退款完成

退款因为流程与支付大同小异,因此退款的PHP类我选择了直接继承支付类,

代码如下,注意区分退款请求方法postXmlSSLCurl和支付请求方法postXmlCurl的区别,这也就是上文提到的退款需要的双向证书的使用。

三. 总结

经验分享 程序员 微信小程序 职场和发展