实现小程序支付功能的方

  介绍

这篇文章主要介绍实现小程序支付功能的方,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

实现小程序支付功能的方法:首先进行前端请求支付,并在后端请求微信服务器,然后后端接受微信服务器并返回数据,接着前端发起支付,最后后端接受微信服务器回调即可。

<强>实现小程序支付功能的方法:

<强> 1。前端请求支付

前端请求支付,就是简单的携带支付需要的数据,例如用户标识,支付金额,支付订单ID等等跟你的业务逻辑有关或者跟下一步请求微信服务器支付统一下单接口需要的数据有关* *的相关数据,使用微信小程序的<代码>天气。请求()去请求后端的支付接口。

<强> 2。后端请求微信服务器

后端接收到前端发送的支付请求后,可以进行一下相关验证,例如判断一下用户有没有问题,支付金额对不对等等。在验证没什么问题,可以向微信服务器申请支付之后,后端需要使用微信规定的数据格式去请求微信的支付统一下单接口。

在处理好所有数据后,将这些数据以XML格式整理并以发布方法发送到微信支付统一下单接口

<强> 3。后端接受微信服务器返回数据

微信服务器在接收到支付数据之后,如果数据没有问题,其会返回用于支付的相应数据,其中非常重要的是名称为prepay_id的数据字段,需要将此数据返回前端,前端才能继续支付。

因此,在后端接收到微信服务器的返回数据后,需要进行相应的处理,最终返回到前端数据,后端的支付接口已经完成了接收前端支付请求,并返回了前端支付所需数据的功能。

<强> 4。前端发起支付

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

<强> 5。后端接受微信服务器回调

前端完成支付后,微信服务器确认支付已经完成。就会向第一步中设置的回调地址发送通知。后端的接收回调接口在接收到通知后,就可以判断支付是否完成,从而决定后续动作。

确认支付后,微信服务器会根据通知<代码> result_code>

对比后可以发现发现,其实小程序中做支付比公众号支付要省事很多,因为不需要支付授权目录,也不需要授权域名,但是支付流程却比公众号多了一步,就是统一下单是预支付,然后需要对预支付的结果再次签名之后,才调起支付。

<强>完整代码如下:

//小程序端代码:   支付:函数(){   var=这   wx.getStorage ({   关键:& # 39;openid # 39;   成功:函数(res) {   wx.request ({//这里是后台的处理方法,url是自定义的,直接换成你自己的后台处理方法即可,Wx_Pay这个方法在下面写的有//后台用的php做处理,java的可以参考方法,道理都是一样的   url: url + & # 39; Wx_Pay& # 39;   数据:{//用户的openid   openid: res.data,   费用:that.data。totalPrice,//支付金额   细节:that.data.goodsList [0] .goods_name,//支付商品的名称   },   成功:函数(结果){   如果(result.data) {//out_trade_no=res.data [& # 39; out_trade_no& # 39;];   wx.requestPayment ({   时间戳:result.data[& # 39;时间戳# 39;],   nonceStr: result.data [& # 39; nonceStr& # 39;],   包:result.data[& # 39;包# 39;],   signType: & # 39; md5 # 39;   paySign: result.data [& # 39; paySign& # 39;],   & # 39;成功# 39;:函数(successret) {   console.log(& # 39;支付成功& # 39;);//获取支付用户的信息   wx.getStorage ({   关键:& # 39;用户信息# 39;   成功:函数(getuser) {//加入订单表做记录   wx.request ({   url: url + & # 39; Wx_AddOrder& # 39;   数据:{   uname: getuser.data.nickName,   商品:that.data.goodsList [0] .goods_name,   价格:that.data.totalPrice,   openid: res.data,   },   成功:函数(lastreturn) {   console.log(“存取成功“);   }   })   },   })   },& # 39;失败# 39;:函数(res) {   }   })   }   }   })   },   })   },//后台//微信支付   公共函数Wx_Pay () {   美元请求=请求:实例();   费用=美元请求→参数(& # 39;费用# 39;);   $=$请求细节→参数(& # 39;细节# 39;);//商品的详情,比如iPhone8,紫色//费=0.01美元;//举例充值0.01   $ appid=& # 39; appid& # 39;;//appid   身体=细节;美元//& # 39;金邦汇商城& # 39;;//& # 39;【自己填写】& # 39;   $ mch_id=& # 39; 1486742092 & # 39;;//& # 39;你的商户号【自己填写】& # 39;   nonce_str=这→美元nonce_str();//随机字符串   $ notify_url=& # 39; https://zys.jinbh.cn/admin/Api/Wx_Speech& # 39;;//回调url的【自己填写】& # 39;;   openid=美元请求→参数(& # 39;openid # 39;);//& # 39;用户的openid【自己填写】& # 39;;   out_trade_no=这→美元order_number ($ openid);//商户订单号   $ spbill_create_ip=& # 39; 123.206.45.131& # 39;;//& # 39;服务器的ip【自己填写】& # 39;;   total_fee=费* 100美元;//因为充值金额最小是1而且单位为分如果是充值1元所以这里需要* 100   $ trade_type=& # 39; jsapi # 39;;//交易类型默认//这里是按照顺序的因为下面的签名是按照顺序排序错误肯定出的错   $发布[& # 39;appid& # 39;]=$ appid;   $发布[& # 39;身体# 39;]=$身体;      $发布[& # 39;mch_id& # 39;]=$ mch_id;      $发布[& # 39;nonce_str& # 39;]=$ nonce_str;//随机字符串      $发布[& # 39;notify_url& # 39;]=$ notify_url;      $发布[& # 39;openid # 39;]=$ openid;      $发布[& # 39;out_trade_no& # 39;]=$ out_trade_no;      $发布[& # 39;spbill_create_ip& # 39;]=$ spbill_create_ip;//终端的ip      $发布[& # 39;total_fee& # 39;]=$ total_fee;//总金额最低为一块钱必须是整数      $发布[& # 39;trade_type& # 39;]=$ trade_type;   符号=这→美元符号($);//签名   $ post_xml=& # 39; & lt; xml>   & lt; appid> & # 39;。美元appid强生# 39;& lt;/appid>   & lt; body> & # 39; $身体强生# 39;& lt;/body>   & lt; mch_id> & # 39;。美元mch_id强生# 39;& lt;/mch_id>   & lt; nonce_str> & # 39;。美元nonce_str强生# 39;& lt;/nonce_str>   & lt; notify_url> & # 39;。美元notify_url强生# 39;& lt;/notify_url>   & lt; openid> & # 39;。美元openid标准# 39;& lt;/openid>   & lt; out_trade_no> & # 39;。美元out_trade_no强生# 39;& lt;/out_trade_no>   & lt; spbill_create_ip> & # 39;。美元spbill_create_ip强生# 39;& lt;/spbill_create_ip>   & lt; total_fee> & # 39;。美元total_fee强生# 39;& lt;/total_fee>   & lt; trade_type> & # 39;。美元trade_type强生# 39;& lt;/trade_type>   & lt; sign> & # 39;。美元符号# 39;公司& lt;/sign>   & lt;/xml>& # 39;;//统一接口prepay_id   $ url=& # 39; https://api.mch.weixin.qq.com/pay/unifiedorder& # 39;;   $ xml=$ this→http_request (url, post_xml美元);   数组=美元这个→xml ($ xml);//全要大写   如果($ array [& # 39; RETURN_CODE& # 39;]==& # 39;成功# 39;,,美元array [& # 39; RESULT_CODE& # 39;]==& # 39;成功# 39;){   $=时间();   $ tmp=& # 39; & # 39;;//临时数组用于签名   $ tmp [& # 39; appId& # 39;]=$ appid;   $ tmp [& # 39; nonceStr& # 39;]=$ nonce_str;   $ tmp[& # 39;包# 39;]=& # 39;prepay_id=& # 39;。美元数组(& # 39;PREPAY_ID& # 39;);   $ tmp [& # 39; signType& # 39;]=& # 39; md5 # 39;;   $ tmp[& # 39;时间戳# 39;]=皌ime"美元;;   $ data[& # 39;国家# 39;]=1;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

实现小程序支付功能的方