100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 微信小程序开发支付功能的实现代码

微信小程序开发支付功能的实现代码

时间:2019-12-29 02:55:25

相关推荐

微信小程序开发支付功能的实现代码

微信小程序|小程序开发

微信小程序

微信小程序-小程序开发

这篇文章主要介绍微信小程序开发在线支付功能的实现代码的相关资料,需要的朋友可以参考下

社交 小程序 源码,vscode导出代码为图片,ubuntu查看redis,设置tomcat登录超时,爬虫获取html,php7 环境变量,南通港闸区专业seo专业团队,园林网站源代码,绿色模板下载lzw

微信小程序 在线支付功能

店内点餐源码,vscode制作笔记,ubuntu下载geany,tomcat是免费的,sqlite3字符串做索引,昆明爬虫,qq机器人源码php,杭州seo网站推广效果,wp网站搭建教学视频,阿里小说网站模板lzw

最近需要在微信小程序中用到在线支付功能,于是看了一下官方的文档,发现要在小程序里实现微信支付还是很方便的,如果你以前开发过服务号下的微信支付,那么你会发现其实小程序里的微信支付和服务号里的开发过程如出一辙,下面我就具体说一下小程序里微信支付的开发流程和注意点。

源码文件免费下载,10硬盘安装ubuntu,宝塔tomcat9开启管理,爬虫怎么念,php语言与哪个语言相近,python结合seolzw

1.开通微信支付和微信商户号

这个过程就和开通服务号的微信支付过程一样,没有什么可以说的。

2.获得用户的openid

首页我们需要在小程序的客户端js中获取当前用户的openid,通过调用wx.login方法可以得到用户的code,然后开发者服务器使用登录凭证 code 获取 openid。

wx.login({ success: function(res) { if (res.code) {//发起网络请求wx.request({url: https://yourwebsit/onLogin,method: POST,data: { code: res.code},success: function(res) { var openid = res.data.openid;},fail: function(err) { console.log(err)}}) } else {console.log(获取用户登录态失败! + res.errMsg) } } });

var code = req.param("code"); request({url: "https://api./sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code",method: GET }, function(err, response, body) {if (!err && response.statusCode == 200) { res.json(JSON.parse(body));} });

3.获取prepay_id和支付签名验证paySign

这一步的过程就和服务号里的微信支付过程一样,分为客户端和服务器端

首先来看一下客户端js

在服务号里,我们是通过如下的代码来调起支付功能

function jsApiCall() {WeixinJSBridge.invoke( getBrandWCPayRequest, {"appId":"", //公众号名称,由商户传入 "timeStamp":"",//时间戳,自1970年以来的秒数 "nonceStr":"", //随机串 "package":"prepay_id=", "signType":"MD5",//微信签名方式: "paySign":"" //微信签名 }, function(res){WeixinJSBridge.log(res.err_msg);if( res.err_msg =="get_brand_wcpay_request:ok"){ alert("支付成功!");}else{ alert("支付失败!");} }); }

在小程序里,我们是通过wx.requestPayment方法来调起支付功能,当然在这之前,我们先要获取prepay_id。

wx.request({url: https://yourwebsit/service/getPay, method: POST,data: { bookingNo:bookingNo, /*订单号*/ total_fee:total_fee, /*订单金额*/ openid:openid},header: { content-type: application/json},success: function(res) { wx.requestPayment({ imeStamp:timeStamp, onceStr: nonceStr, package: prepay_id=+res.data.prepay_id, signType: MD5, paySign: res.data._paySignjs, success:function(res){console.log(res); }, fail:function(res){console.log(fail:+JSON.stringify(res)); } })},fail: function(err) { console.log(err)} })

那在服务器端主要要实现的是prepay_id的获取和签名paySign

var bookingNo = req.param("bookingNo"); var total_fee = req.param("total_fee"); var openid = req.param("openid"); var body = "费用说明"; var url = "https://api.mch./pay/unifiedorder"; var formData = ""; formData += "appid"; //appid formData += "test"; formData += "" + body + ""; formData += "mch_id"; //商户号 formData += "nonce_str"; formData += "notify_url"; formData += "" + openid + ""; formData += "" + bookingNo + ""; formData += "spbill_create_ip"; formData += "" + total_fee + ""; formData += "JSAPI"; formData += "" + paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, bookingNo, spbill_create_ip, total_fee, JSAPI) + ""; formData += ""; request({url: url,method: POST,body: formData }, function(err, response, body) {if(!err && response.statusCode == 200) { var prepay_id = getXMLNodeValue(prepay_id, body.toString("utf-8")); var tmp = prepay_id.split([); var tmp1 = tmp[2].split(]); //签名 var _paySignjs = paysignjs(appid, mch_id, prepay_id= + tmp1[0], MD5,timeStamp); var o = {prepay_id: tmp1[0],_paySignjs: _paySignjs } res.send(o);} });

下面是用到的函数

function paysignjs(appid, nonceStr, package, signType, timeStamp) { var ret = { appId: appid, nonceStr: nonceStr, package: package, signType: signType, timeStamp: timeStamp }; var string = raw1(ret); string = string + &key=+key; console.log(string); var crypto = require(crypto); return crypto.createHash(md5).update(string, utf8).digest(hex);};function raw1(args) { var keys = Object.keys(args); keys = keys.sort() var newArgs = {}; keys.forEach(function(key) { newArgs[key] = args[key]; }); var string = \; for(var k in newArgs) { string += & + k + = + newArgs[k]; } string = string.substr(1); return string;};function paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, out_trade_no, spbill_create_ip, total_fee, trade_type) { var ret = { appid: appid, attach: attach, body: body, mch_id: mch_id, nonce_str: nonce_str, notify_url: notify_url, openid: openid, out_trade_no: out_trade_no, spbill_create_ip: spbill_create_ip, total_fee: total_fee, trade_type: trade_type }; var string = raw(ret); string = string + &key=+key; var crypto = require(crypto); return crypto.createHash(md5).update(string, utf8).digest(hex);};function raw(args) { var keys = Object.keys(args); keys = keys.sort() var newArgs = {}; keys.forEach(function(key) { newArgs[key.toLowerCase()] = args[key]; }); var string = \; for(var k in newArgs) { string += & + k + = + newArgs[k]; } string = string.substr(1); return string;};function getXMLNodeValue(node_name, xml) { var tmp = xml.split(""); var _tmp = tmp[1].split(""); return _tmp[0];}

这样简单3步,小程序的微信支付功能就接上了,下面是测试的支付效果图

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。