微信小程序关闭调试支付为什么打开调试时才有用,关闭调试就不行

微信小程序 支付简单实例及注意事项
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了微信小程序 支付简单实例的相关资料,这里参考官方文档写的简单实例,并提出注意事项,需要的朋友可以参考下
微信小程序 支付
微信小程序的支付和微信公众号的支付是类似的,对比起来还比公众号支付简单了一些,我们只需要调用微信的统一下单接口获取prepay_id之后我们在调用微信的支付即可。
今天我们来封装一般node的支付接口!!!
首先调用统一下单接口我们需要知道一些信息
var bookingNo = 'davdian' + this.createNonceStr() + this.createTimeStamp()
var deferred = Q.defer()
var appid = config.appId
var nonce_str = this.createNonceStr()
var timeStamp = this.createTimeStamp()
var url = "https://api.mch./pay/unifiedorder"
var formData = "&xml&"
formData += "&appid&" + appid + "&/appid&" //appid
formData += "&attach&" + attach + "&/attach&" //附加数据
formData += "&body&" + body + "&/body&"
formData += "&mch_id&" + mch_id + "&/mch_id&" //商户号
formData += "&nonce_str&" + nonce_str + "&/nonce_str&" //随机字符串,不长于32位。
formData += "&notify_url&" + notify_url + "&/notify_url&"
formData += "&openid&" + openid + "&/openid&"
formData += "&out_trade_no&" + bookingNo + "&/out_trade_no&"
formData += "&spbill_create_ip&61.50.221.43&/spbill_create_ip&"
formData += "&total_fee&" + total_fee + "&/total_fee&"
formData += "&trade_type&JSAPI&/trade_type&"
formData += "&sign&" + this.paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, bookingNo, '61.50.221.43', total_fee, 'JSAPI') + "&/sign&"
formData += "&/xml&"
var self = this
method: 'POST',
body: formData
}, function(err, response, body) {
if (!err && response.statusCode == 200) {
var prepay_id = self.getXMLNodeValue('prepay_id', body.toString("utf-8"))
var tmp = prepay_id.split('[')
var tmp1 = tmp[2].split(']')
var _paySignjs = self.paysignjs(appid, nonce_str, 'prepay_id=' + tmp1[0], 'MD5', timeStamp)
var args = {
appId: appid,
timeStamp: timeStamp,
nonceStr: nonce_str,
signType: "MD5",
package: tmp1[0],
paySign: _paySignjs
deferred.resolve(args)
console.log(body)
return deferred.promise
这个是一个统一下单接口的代码,我们需要appid小程序公众号id,mch_id商户号id,openid小程序的唯一标实,key支付用的密码,剩下的参数都是订单的信息和价格之类的,本人require进q模块使用promise,这个因人而异,可以根据自己需要来。我们需要请求https://api.mch./pay/unifiedorder接口
注意:这里我们传递的formdata是一个xml而不是json
然后我们需要签名方法,这里我们需要封装两个方法,一个是签名方法调用统一下单接口会用到,另一个是调用小程序支付用到
统一下单接口sign:
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 = this.raw(ret)
string = string + '&key=' + key
var crypto = require('crypto')
var sign = crypto.createHash('md5').update(string, 'utf8').digest('hex')
return sign.toUpperCase()
支付sign:
var ret = {
appId: appid,
nonceStr: nonceStr,
package: package,
signType: signType,
timeStamp: timeStamp
var string = this.raw(ret)
string = string + '&key=' + key
var sign = crypto.createHash('md5').update(string, 'utf8').digest('hex')
return sign.toUpperCase()
注意加密的时候我们获取的是string而不是一个json,所以我们需要吧json转换成string,代码如下:
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
统一下单接口返回的是带有prepay_id的xml,所以我们需要一个方法进行解析,代码如下:
var tmp = xml.split("&" + node_name + "&")
var _tmp = tmp[1].split("&/" + node_name + "&")
return _tmp[0]
最后我们只需要把这些连接到一起就是可以获取所有微信支付所需参数,代码如下:
//微信小程序支付封装,暂支持md5加密,不支持sha1
***create order by jianchep
var config = require('../config/weapp.js')
var Q = require("q")
var request = require("request")
var crypto = require('crypto')
var ejs = require('ejs')
var fs = require('fs')
var key = config.key
module.exports = {
// 获取prepay_id
getXMLNodeValue: function(node_name, xml) {
var tmp = xml.split("&" + node_name + "&")
var _tmp = tmp[1].split("&/" + node_name + "&")
return _tmp[0]
// object--&string
raw: function(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
// 随机字符串产生函数
createNonceStr: function() {
return Math.random().toString(36).substr(2, 15)
// 时间戳产生函数
createTimeStamp: function() {
return parseInt(new Date().getTime() / 1000) + ''
// 支付md5加密获取sign
paysignjs: function(appid, nonceStr, package, signType, timeStamp) {
var ret = {
appId: appid,
nonceStr: nonceStr,
package: package,
signType: signType,
timeStamp: timeStamp
var string = this.raw(ret)
string = string + '&key=' + key
var sign = crypto.createHash('md5').update(string, 'utf8').digest('hex')
return sign.toUpperCase()
// 统一下单接口加密获取sign
paysignjsapi: function(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 = this.raw(ret)
string = string + '&key=' + key
var crypto = require('crypto')
var sign = crypto.createHash('md5').update(string, 'utf8').digest('hex')
return sign.toUpperCase()
// 下单接口
order: function(attach, body, mch_id, openid, total_fee, notify_url) {
var bookingNo = 'davdian' + this.createNonceStr() + this.createTimeStamp()
var deferred = Q.defer()
var appid = config.appId
var nonce_str = this.createNonceStr()
var timeStamp = this.createTimeStamp()
var url = "https://api.mch./pay/unifiedorder"
var formData = "&xml&"
formData += "&appid&" + appid + "&/appid&" //appid
formData += "&attach&" + attach + "&/attach&" //附加数据
formData += "&body&" + body + "&/body&"
formData += "&mch_id&" + mch_id + "&/mch_id&" //商户号
formData += "&nonce_str&" + nonce_str + "&/nonce_str&" //随机字符串,不长于32位。
formData += "&notify_url&" + notify_url + "&/notify_url&"
formData += "&openid&" + openid + "&/openid&"
formData += "&out_trade_no&" + bookingNo + "&/out_trade_no&"
formData += "&spbill_create_ip&61.50.221.43&/spbill_create_ip&"
formData += "&total_fee&" + total_fee + "&/total_fee&"
formData += "&trade_type&JSAPI&/trade_type&"
formData += "&sign&" + this.paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, bookingNo, '61.50.221.43', total_fee, 'JSAPI') + "&/sign&"
formData += "&/xml&"
var self = this
method: 'POST',
body: formData
}, function(err, response, body) {
if (!err && response.statusCode == 200) {
var prepay_id = self.getXMLNodeValue('prepay_id', body.toString("utf-8"))
var tmp = prepay_id.split('[')
var tmp1 = tmp[2].split(']')
var _paySignjs = self.paysignjs(appid, nonce_str, 'prepay_id=' + tmp1[0], 'MD5', timeStamp)
var args = {
appId: appid,
timeStamp: timeStamp,
nonceStr: nonce_str,
signType: "MD5",
package: tmp1[0],
paySign: _paySignjs
deferred.resolve(args)
console.log(body)
return deferred.promise
之后我们封装下单接口:
unifiedorder: function (req, res) {
var body = "测试支付"
var openid = "openid"
var total_fee = 1
var notify_url = "http://localhost/notify"
var mch_id = config.shopId
var attach = "测试"
wxpay.order(attach, body, mch_id, openid, total_fee, notify_url)
.then(function(data){
console.log('data---&', data, 123123)
res.json(data)
然后我们只需要在小程序里面调用这个接口,就会获取到所有的支付需要信息,再掉微信支付即可。
这里说几个小程序支付的坑:
1.统一下单接口是xml(这个不只是小程序,公众号也是),返回值也是xml格式需要自己获取prepay_id,
2.签名算法要带上key,最后要转换成大些
3.微信支付的sign算法也要带上appid(这个不科学,深坑)
4.签名算法一定不要用json拼接key
感谢阅读,希望能帮助到大家,谢谢大家对本站 的支持!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具微信小程序的微信支付功能,只是用来调试,并不需要它真实可行,可以不交那300块然后做出微信支付功能吗? - 知乎1被浏览141分享邀请回答还没有回答9746人阅读
微信小程序(5)
在上篇“”虽然没有申请认证,但还是可以拿到小程序ID和小程序密钥的。有了小程序ID和小程序密钥的,我们就可以在手机上查看调试微信小程序了。创建项目要填写注册时拿到小程序ID第二次创建项目,发现项目目录下不会以项目名称自动创建同名的目录,这一点很不好。创建成功后,点击左侧的项目,右侧会发现,在“开发者工具下载安装及创建项目功能预览”中创建的项目没有AppID所以预览和上传都不可用,而现在都变成可用的了。点击预览就会自动上传,然后显示一个二维码,就可以在手机上用微信扫描二维码查看调试微信小程序了。在手机上查看小程序扫描之后首先显示一个加载的动画,需要等待两三秒,感觉还不如打开网页快。注意:右下角有个“vConsole”的按钮,是通过右上角的菜单,开户调试后才显示的。点击“vConsole”按钮后,会看到下图的调试信息了。结束语感觉一个最基本的示例加载的速度还不如一个网页加载的速度快,可能是需要登录验证获取用户信息的原因?等到真正上线再看体验如何吧。上一篇:系列链接:===========文档信息============&版权声明:非商用自由转载-保持署名-注明出处&署名(BY) :testcs_dn(微wx笑)&文章出处:[无知人生,记录点滴](http://blog.csdn.net/testcs_dn)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7259863次
积分:57344
积分:57344
排名:第47名
原创:767篇
转载:204篇
译文:26篇
评论:1597条
文章:129篇
阅读:1911019
文章:33篇
阅读:200073
文章:16篇
阅读:158395
阅读:14112
文章:29篇
阅读:357407
文章:18篇
阅读:327365
文章:44篇
阅读:364866
(11)(17)(14)(18)(26)(16)(9)(23)(20)(17)(4)(16)(12)(17)(25)(34)(19)(15)(17)(15)(23)(12)(12)(14)(13)(14)(20)(58)(25)(31)(16)(33)(31)(20)(24)(23)(21)(20)(14)(36)(14)(14)(7)(5)(15)(3)(2)(9)(6)(7)(32)(3)(8)(7)(22)(2)(30)(4)
关注我的订阅号“微wx笑”iOS_微信支付调试总结_山哥么么哒_新浪博客
iOS_微信支付调试总结
开发文档:https://pay./wiki/doc/api/app/app.php?chapter=8_1
App端开发步骤:https://pay./wiki/doc/api/app/app.php?chapter=8_5
微信支付检测用户是否安装了微信失败:
-canOpenURL: failed for URL:
"weixin://app/wxc1a4f7b985d87012/" - error: "This app is not
allowed to query for scheme weixin"
1、项目设置APPID
商户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID。在Xcode中打开项目,设置项目属性中的URL
Schemes为您的APPID。如图标红位置所示。
2、注册APPID
商户APP工程中引入微信lib库和头文件,调用API前,需要先向微信注册您的APPID,代码如下:
[WXApi registerApp:@"wxd930ea5d5a258f4f"
withDescription:@"demo 2.0"];
添加iOS9 URL Schemes.
再调用OpenUrl测试一下
if ([[UIApplication sharedApplication] canOpenURL:[NSURL
URLWithString:@"weixin://"]])
NSLog(@"OK weixin://");
if ([[UIApplication sharedApplication] canOpenURL:[NSURL
URLWithString:@"wechat://"]])
NSLog(@"OK wechat://");
if ([[UIApplication sharedApplication] canOpenURL:[NSURL
URLWithString:@"fb170://"]])
NSLog(@"OK fb170://");
iOS9中新增App Transport Security(简称ATS)特性,
主要使到原来请求的时候用到的HTTP,都转向TLS1.2协议进行传输。这也意味着所有的HTTP协议都强制使用了HTTPS协议进行传输。需要在Info.plist新增一段用于控制ATS的配置:
NSAppTransportSecurity
NSAllowsArbitraryLoads
//注册微信
BOOL isWXRegisterSuccess = [WXApi
registerApp:WeiXinAPP_ID];
正确的格式如下:
错误的格式如下:
不能数组中再套数组!!!否则无效!!!(表示被队友坑了很久。。。。。。)
正确添加如下代码:
LSApplicationQueriesSchemes
sinaweibohd
sinaweibosso
weibosdk2.5
mqqOpensdkSSoLogin
mqqconnect
mqqopensdkdataline
mqqopensdkgrouptribeshare
mqqopensdkfriend
mqqopensdkapi
mqqopensdkapiV2
mqqopensdkapiV3
mqzoneopensdk
wtloginmqq
wtloginmqq2
mqzoneshare
wtloginqzone
mqzoneopensdkapiV2
mqzoneopensdkapi19
mqzoneopensdkapi
mqzoneopensdk
alipayshare
正确完成配置后,检查如下三项
1、是否调用了[WXApi
registerApp:yourappid]并调用成功,并且appid有效,你在平台上注册的Bundle
identifier和你当前工程的一样;
2、确保在主线程中调用上述方法,可将其写在didFinishLaunchingWithOptions里面。
3、服务器Server是否正确接入了微信支付,确保服务器返回的PayReq数据正确,特别注意appid的值!
山哥么么哒
博客等级:
博客积分:0
博客访问:125,082
关注人气:0
荣誉徽章:}

我要回帖

更多关于 微信小程序 断点调试 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信