主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情! |
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作 |
【相关学习推荐:小程序开发教程】
小程序支付功能的实现方法:
1.前端请求付款
前端的支付请求只携带支付所需的数据,如用户ID、支付金额、支付订单ID等。,关系到你的业务逻辑或者下一步请求微信服务器支付统一订单接口所需的数据,使用微信小程序的wx.request()请求后端支付接口。
2.后端请求微信服务器。
后端收到前端发送的支付请求后,可以进行相关验证,例如判断用户是否有问题、支付金额是否正确等等。在验证没有问题并向微信服务器申请支付后,后端需要使用微信指定的数据格式请求微信的统一支付订购接口。
所有数据经过处理后,这些数据以XML格式进行排序,并通过POST方法发送到微信支付的统一订购接口。
3.后端接受微信服务器返回的数据。
微信服务器收到支付数据后,如果数据没有问题,就会返回相应的数据进行支付,其中名为prepay_id的数据字段非常重要,需要返回给前端,前端才能继续支付。
因此,后端在收到微信服务器返回的数据后,需要做相应的处理,最终返回给前端数据。后端的支付接口已经完成了接收前端支付请求并返回前端支付所需数据的功能。
4.前端发起的支付
前端收到返回的数据后,使用wx.requestPayment()请求发起支付。该API所需的对象参数值是我们在上一步中返回的数据。
5.后端接受微信服务器的回调。
前端完成支付后,微信服务器确认支付已完成。通知将发送到第一步中设置的回调地址。后端接收回调接口收到通知后,可以判断支付是否完成,进而决定后续动作。
确认支付后,微信服务器会根据通知结果_代码字段判断支付是否成功。后端收到成功通知后,需要返回成功数据通知微信服务器已收到回拨通知,从而完成支付流程,否则微信服务器会不断向后端发送消息。
经过对比可以发现,在小程序中进行支付比在微信官方账号中容易得多,因为无需支付授权目录或授权域名,但支付流程比在微信官方账号中多了一步,即预先支付统一订单,然后在再次签署预付支付的结果后调整支付。
完整的代码如下:
//小程序代码:pay:function(){ var that = this wx . get storage({ key:& # 39;openid & # 39,success:function(RES){ Wx . request({//这里是后台处理方法,url是自定义的,直接改成自己的后台处理方法就行了,下面用//php写Wx_Pay的方法进行后台处理,java可以引用该方法,原因是同一个URL:URL+& # 39;Wx _ Pay & # 39,数据:{//用户的OpenID OpenID: res.data,费用:that.data.total price,//支付金额详细信息:that . data . goods list【0】。goods _ name,//支付商品名称},success:function(result){ if(result . data)。out _ trade _ no & # 39];wx . request payment({ timeStamp:result . data【& # 39;时间戳& # 39;】,non centr:result . data【& # 39;非明星】,package:result . data【& # 39;套餐& # 39;】,sign type:& # 39;MD5 & # 39,paySign:result . data【& # 39;paySign & # 39],'成功& # 39;:function(successret){ console . log(& # 39;支付成功& # 39;);//获取信息wx . Get storage({ key:& # 39;用户信息& # 39;,success:function(getuser){//添加订单记录wx . request({ URL:URL+& # 39;Wx _ AddOrder & # 39,data:{ uname:getuser . data . nickname,goods:that . data . goods list【0】。goods _ name,price: that.data.total price,OpenID: res.data,},success:function(last turn){ console . log(。}})},})},'失败& # 39;:function(RES){ }})} })、} }、//后台//微信支付公共函数wx _ pay(){ $ request = request::instance();$ fee = $ request -》param(& # 39;费& # 39;);$ details = $ request -》param(& # 39;详情& # 39;);//产品详情,如iPhone8,紫色//$ fee = 0.01;//比如充值0.01 $ appid = & # 39appid & # 39;//appid $ body = $ details;// '金邦汇购物中心& # 39;;//'【自行填写】& # 39;$ mch _ id = & # 391486742092';//'您的商户编号【自行填写】& # 39;$ nonce _ str = $ this -》nonce _ str();//随机字符串$ notify _ url = & # 39https://zys.jinbh.cn/admin/Api/Wx_Speech';//回拨url【自行填写】& # 39;;$ OpenID = $ request -》param(& # 39;openid & # 39);//'用户的openid【自行填写】& # 39;;$ out _ trade _ no = $ this -》order _ number($ OpenID);//商家订单号$ spbill _ create _ ip = & # 39123.206.45.131';//'服务器的ip地址【自行填写】& # 39;;$ total _ fee = $ fee * 100//由于最低充值金额为1,单位为分钟,如果是充值1元,则需要* 100 $ trade _ type = & # 39JSAPI & # 39;//交易类型默认//这是按顺序的,因为下面的签名是按顺序排序的。一定有错误$ post【& # 39;appid & # 39】= $ appid$ post【& # 39;正文& # 39;】= $ body$ post【& # 39;mch _ id & # 39】= $ mch _ id$ post【& # 39;nonce _ str & # 39】= $ nonce _ str//random string $ post【& # 39;notify _ url & # 39】= $ notify _ url$ post【& # 39;openid & # 39】= $ openid$ post【& # 39;out _ trade _ no & # 39】= $ out _ trade _ no$ post【& # 39;spbill _ create _ ip & # 39】= $ spbill _ create _ ip//终端的IP $ post【& # 39;total _ fee & # 39】= $ total _ fee//一美元的最小总金额必须是整数$ post【& # 39;trade _ type & # 39】= $ trade _ type$ sign = $ this -》sign($ post);//signature $ post _ XML = & # 39;'。$appid。''。$body。''。$mch_id。''。$nonce_str。''。$notify_url''。$openid。''。$ out _ trade _ no. & # 39'。$spbill_create_ip。''。$total_fee''。$trade_type。''。$符号。'';//统一接口prepay _ id $ url = & # 39https://api.mch.weixin.qq.com/pay/unifiedorder';$ XML = $ this -》http _ request($ URL,$ post _ XML);$ array = $ this -》XML($ XML);//全部大写的if($ array【& # 39;RETURN _ CODE & # 39] == '成功& # 39;& & $ array【& # 39;RESULT _ CODE & # 39] == '成功& # 39;){ $ time = time();$ tmp = & # 39';//临时数组用于签署$ tmp【& # 39;appId & # 39】= $ appid$ tmp【& # 39;非明星】= $ nonce _ str$ tmp【& # 39;套餐& # 39;] = 'prepay _ id = & # 39。$ array【& # 39;PREPAY _ ID & # 39];$ tmp【& # 39;signType & # 39] = 'MD5 & # 39;$ tmp【& # 39;时间戳& # 39;】=“$ time“;$ data【& # 39;国家& # 39;] = 1;$ data【& # 39;时间戳& # 39;】=“$ time“;//timestamp $ data【& # 39;非明星】= $ nonce _ str//随机字符串$ data【& # 39;signType & # 39] = 'MD5 & # 39;//签名算法,暂时支持MD5 $ data【& # 39;套餐& # 39;] = 'prepay _ id = & # 39。$ array【& # 39;PREPAY _ ID & # 39];//统一订购接口返回的prepay_id的参数值。提交格式如下:prepay _ id = * $ data【& # 39;paySign & # 39】= $this-》符号($ tmp);//签名,具体签名方案请参考微信官方账号的支付帮助文档;$ data【& # 39;out _ trade _ no & # 39】= $ out _ trade _ no} else { $ data【& # 39;国家& # 39;] = 0;$ data【& # 39;正文& # 39;】=“错误“;$ data【& # 39;RETURN _ CODE & # 39】= $ array【& # 39;RETURN _ CODE & # 39];$ data【& # 39;RETURN _ MSG & # 39】= $ array【& # 39;RETURN _ MSG & # 39];} echo JSON _ encode($ data);}//随机32位字符串私有函数nonce _ str(){ $ result = & # 39;';$ str = & # 39qwertyuiopadsfghjklzxvbnmqwertyuiopkjhgfdsamnbvcxz & # 39;;for($ I = 0;$ I $ value){ if(!$value)继续;if($ stringA)$ stringA。= '&'。$key .”=" .$ valueelse $stringA = $key。=" .$ value} $ wx _ key = & # 39张玉生19810318015729366660 & # 39;;//申请支付后,商家会得到一个账号和密码。登录后,您可以设置键$ stringsigntemp = $ stringa。&# 39;& key = & # 39。$ wx _ key//申请支付后,商家会给你一个账号和密码,登录后你可以设置自己的密钥返回strtop(MD5($ stringsigtemp);}//curl请求函数http _ request($ URL,$ data = null,$ headers = array()){ $ curl = curl _ init();if(count($ headers)》= 1){ curl _ set opt($ curl,CURLOPT_HTTPHEADER,$ headers);} curl _ setopt($ curl,CURLOPT_URL,$ URL);curl _ setopt($ curl,CURLOPT_SSL_VERIFYPEER,FALSE);curl _ setopt($ curl,CURLOPT_SSL_VERIFYHOST,FALSE);如果(!empty($ data)){ curl _ setopt($ curl,CURLOPT_POST,1);curl _ setopt($ curl,CURLOPT_POSTFIELDS,$ data);} curl _ set opt($ curl,CURLOPT_RETURNTRANSFER,1);$ output = curl _ exec($ curl);curl _ close($ curl);return $ output}//Get XML私有函数XML($ XML){ $ p = XML _ parser _ create();XML _ parse _ into _ struct($ p,$xml,$vals,$ index);XML _ parser _ free($ p);$ data =““;foreach($ index as $ key =》$ value){ if($ key = = & # 39;xml & # 39| | $ key = = & # 39XML & # 39)继续;$ tag = $ vals【$ value【0】】【& # 39;标签& # 39;];$ value = $ vals【$ value【0】】【& # 39;价值& # 39;];$ data【$ tag】= $ value;} return $ data}//微信支付End以上就是如何实现小程序支付功能的细节。更多资讯请关注主机参考等相关文章!
这几篇文章你可能也喜欢:
- 如何实现小程序发送服务通知(小程序如何主动向用户发送通知)
- 如何获取小程序的unionid(如何获取小程序的页面路径)
- 生成海报的示例小程序(Java后端)(微信小程序生成海报演示)
- 什么是小程序? 有哪些功能?(什么是小程序?有哪些功能?)
- 介绍如何用小程序生成参数二维码(二维码+小程序参数)
本文由主机参考刊发,转载请注明:如何实现小程序的支付功能(如何实现小程序的支付功能) https://zhujicankao.com/101662.html
评论前必须登录!
注册