一、App平台支付流程
流程:支付平台功能申请 -> manifest.json 里配置支付参数 -> uni-app 里调用 API 进行支付
二、微信App支付功能申请
到 微信开放平台 申请移动应用并开通支付功能,申请应用后可以获取 AppID 和 AppSecret 值应用接入 微信商户平台,选择 App 支付开通支付功能后可获取支付业务服务器配置数据:PARTNER(财付通商户号)、PARTNER_KEY(财付通密钥)、PAYSIGNKEY(支付签名密钥)需要将从微信开放平台申请的appid,填回到 manifest-App SDK配置-支付-微信支付 中。打包后生效。
uni
.getProvider({
service
: 'payment',
success
: (res
)=> {
console
.log(res
.service
)
console
.log(res
.provider
)
this.$
Z.post(this.$url
+'/UserOrderNumber',{
},{}).then(res
=>{
console
.log('获取微信支付的订单号',res
)
let orderData
= res
.data
.orderNumber
this.$
Z.post(this.$url
+'/pay/aliPay',{
},{}).then(res
=>{
let weixinOrderInfo
= res
.data
.data
;
let weixinorder
= this.getPayInfo(weixinOrderInfo
);
uni
.requestPayment({
provider
: 'wxpay',
orderInfo
:weixinorder
,
success(res
){
console
.log('success:' + JSON.stringify(res
));
},
fail(err
){
console
.log('fail:' + JSON.stringify(err
));
}
});
})
})
}
});
getPayInfo (orderInfo
) {
let res
= orderInfo
,
key
= "",
payInfo
= {
appid
: res
.appid
,
noncestr
:res
.noncestr
,
package: res
.package,
partnerid
: res
.partnerid
,
prepayid
: res
.prepayid
,
timestamp
: Number(res
.timestamp
),
}
let keyValueStr
= this.mapObjToKeyValue(payInfo
, true);
let strSignTemp
= `${keyValueStr}&key=${key}`;
let sign
= md5(strSignTemp
).toUpperCase().substr(0, 32);
console
.log(sign
)
payInfo
.sign
= sign
;
return JSON.stringify(payInfo
);
},
mapObjToKeyValue(obj
, isSort
= false) {
let keys
= Object
.keys(obj
);
let str
= "";
if (isSort
) keys
.sort();
keys
.forEach(key
=> {
if (obj
.hasOwnProperty(key
)) {
str
+= `${key}=${obj[key]}&`;
}
});
return str
.replace(/&$/, "");
},
后台返回的微信订单参数:参照微信支付文档的统一下单参数进行对比
如在其过程中遇到:
uniapp APP端微信支付 签名错误,是因为uniapp调起微信支付需要进行第二次签名的,即根据后端统一下单返回数据再进行一次签名,签名方式要确保一致。详情请参照uniapp APP端微信支付 签名错误
附:md5.js源码
;(function ($
) {
'use strict'
function safeAdd (x
, y
) {
var lsw
= (x
& 0xffff) + (y
& 0xffff)
var msw
= (x
>> 16) + (y
>> 16) + (lsw
>> 16)
return (msw
<< 16) | (lsw
& 0xffff)
}
function bitRotateLeft (num
, cnt
) {
return (num
<< cnt
) | (num
>>> (32 - cnt
))
}
function md5cmn (q
, a
, b
, x
, s
, t
) {
return safeAdd(bitRotateLeft(safeAdd(safeAdd(a
, q
), safeAdd(x
, t
)), s
), b
)
}
function md5ff (a
, b
, c
, d
, x
, s
, t
) {
return md5cmn((b
& c
) | (~b
& d
), a
, b
, x
, s
, t
)
}
function md5gg (a
, b
, c
, d
, x
, s
, t
) {
return md5cmn((b
& d
) | (c
& ~d
), a
, b
, x
, s
, t
)
}
function md5hh (a
, b
, c
, d
, x
, s
, t
) {
return md5cmn(b
^ c
^ d
, a
, b
, x
, s
, t
)
}
function md5ii (a
, b
, c
, d
, x
, s
, t
) {
return md5cmn(c
^ (b
| ~d
), a
, b
, x
, s
, t
)
}
function binlMD5 (x
, len
) {
x
[len
>> 5] |= 0x80 << (len
% 32)
x
[((len
+ 64) >>> 9 << 4) + 14] = len
var i
var olda
var oldb
var oldc
var oldd
var a
= 1732584193
var b
= -271733879
var c
= -1732584194
var d
= 271733878
for (i
= 0; i
< x
.length
; i
+= 16) {
olda
= a
oldb
= b
oldc
= c
oldd
= d
a
= md5ff(a
, b
, c
, d
, x
[i
], 7, -680876936)
d
= md5ff(d
, a
, b
, c
, x
[i
+ 1], 12, -389564586)
c
= md5ff(c
, d
, a
, b
, x
[i
+ 2], 17, 606105819)
b
= md5ff(b
, c
, d
, a
, x
[i
+ 3], 22, -1044525330)
a
= md5ff(a
, b
, c
, d
, x
[i
+ 4], 7, -176418897)
d
= md5ff(d
, a
, b
, c
, x
[i
+ 5], 12, 1200080426)
c
= md5ff(c
, d
, a
, b
, x
[i
+ 6], 17, -1473231341)
b
= md5ff(b
, c
, d
, a
, x
[i
+ 7], 22, -45705983)
a
= md5ff(a
, b
, c
, d
, x
[i
+ 8], 7, 1770035416)
d
= md5ff(d
, a
, b
, c
, x
[i
+ 9], 12, -1958414417)
c
= md5ff(c
, d
, a
, b
, x
[i
+ 10], 17, -42063)
b
= md5ff(b
, c
, d
, a
, x
[i
+ 11], 22, -1990404162)
a
= md5ff(a
, b
, c
, d
, x
[i
+ 12], 7, 1804603682)
d
= md5ff(d
, a
, b
, c
, x
[i
+ 13], 12, -40341101)
c
= md5ff(c
, d
, a
, b
, x
[i
+ 14], 17, -1502002290)
b
= md5ff(b
, c
, d
, a
, x
[i
+ 15], 22, 1236535329)
a
= md5gg(a
, b
, c
, d
, x
[i
+ 1], 5, -165796510)
d
= md5gg(d
, a
, b
, c
, x
[i
+ 6], 9, -1069501632)
c
= md5gg(c
, d
, a
, b
, x
[i
+ 11], 14, 643717713)
b
= md5gg(b
, c
, d
, a
, x
[i
], 20, -373897302)
a
= md5gg(a
, b
, c
, d
, x
[i
+ 5], 5, -701558691)
d
= md5gg(d
, a
, b
, c
, x
[i
+ 10], 9, 38016083)
c
= md5gg(c
, d
, a
, b
, x
[i
+ 15], 14, -660478335)
b
= md5gg(b
, c
, d
, a
, x
[i
+ 4], 20, -405537848)
a
= md5gg(a
, b
, c
, d
, x
[i
+ 9], 5, 568446438)
d
= md5gg(d
, a
, b
, c
, x
[i
+ 14], 9, -1019803690)
c
= md5gg(c
, d
, a
, b
, x
[i
+ 3], 14, -187363961)
b
= md5gg(b
, c
, d
, a
, x
[i
+ 8], 20, 1163531501)
a
= md5gg(a
, b
, c
, d
, x
[i
+ 13], 5, -1444681467)
d
= md5gg(d
, a
, b
, c
, x
[i
+ 2], 9, -51403784)
c
= md5gg(c
, d
, a
, b
, x
[i
+ 7], 14, 1735328473)
b
= md5gg(b
, c
, d
, a
, x
[i
+ 12], 20, -1926607734)
a
= md5hh(a
, b
, c
, d
, x
[i
+ 5], 4, -378558)
d
= md5hh(d
, a
, b
, c
, x
[i
+ 8], 11, -2022574463)
c
= md5hh(c
, d
, a
, b
, x
[i
+ 11], 16, 1839030562)
b
= md5hh(b
, c
, d
, a
, x
[i
+ 14], 23, -35309556)
a
= md5hh(a
, b
, c
, d
, x
[i
+ 1], 4, -1530992060)
d
= md5hh(d
, a
, b
, c
, x
[i
+ 4], 11, 1272893353)
c
= md5hh(c
, d
, a
, b
, x
[i
+ 7], 16, -155497632)
b
= md5hh(b
, c
, d
, a
, x
[i
+ 10], 23, -1094730640)
a
= md5hh(a
, b
, c
, d
, x
[i
+ 13], 4, 681279174)
d
= md5hh(d
, a
, b
, c
, x
[i
], 11, -358537222)
c
= md5hh(c
, d
, a
, b
, x
[i
+ 3], 16, -722521979)
b
= md5hh(b
, c
, d
, a
, x
[i
+ 6], 23, 76029189)
a
= md5hh(a
, b
, c
, d
, x
[i
+ 9], 4, -640364487)
d
= md5hh(d
, a
, b
, c
, x
[i
+ 12], 11, -421815835)
c
= md5hh(c
, d
, a
, b
, x
[i
+ 15], 16, 530742520)
b
= md5hh(b
, c
, d
, a
, x
[i
+ 2], 23, -995338651)
a
= md5ii(a
, b
, c
, d
, x
[i
], 6, -198630844)
d
= md5ii(d
, a
, b
, c
, x
[i
+ 7], 10, 1126891415)
c
= md5ii(c
, d
, a
, b
, x
[i
+ 14], 15, -1416354905)
b
= md5ii(b
, c
, d
, a
, x
[i
+ 5], 21, -57434055)
a
= md5ii(a
, b
, c
, d
, x
[i
+ 12], 6, 1700485571)
d
= md5ii(d
, a
, b
, c
, x
[i
+ 3], 10, -1894986606)
c
= md5ii(c
, d
, a
, b
, x
[i
+ 10], 15, -1051523)
b
= md5ii(b
, c
, d
, a
, x
[i
+ 1], 21, -2054922799)
a
= md5ii(a
, b
, c
, d
, x
[i
+ 8], 6, 1873313359)
d
= md5ii(d
, a
, b
, c
, x
[i
+ 15], 10, -30611744)
c
= md5ii(c
, d
, a
, b
, x
[i
+ 6], 15, -1560198380)
b
= md5ii(b
, c
, d
, a
, x
[i
+ 13], 21, 1309151649)
a
= md5ii(a
, b
, c
, d
, x
[i
+ 4], 6, -145523070)
d
= md5ii(d
, a
, b
, c
, x
[i
+ 11], 10, -1120210379)
c
= md5ii(c
, d
, a
, b
, x
[i
+ 2], 15, 718787259)
b
= md5ii(b
, c
, d
, a
, x
[i
+ 9], 21, -343485551)
a
= safeAdd(a
, olda
)
b
= safeAdd(b
, oldb
)
c
= safeAdd(c
, oldc
)
d
= safeAdd(d
, oldd
)
}
return [a
, b
, c
, d
]
}
function binl2rstr (input
) {
var i
var output
= ''
var length32
= input
.length
* 32
for (i
= 0; i
< length32
; i
+= 8) {
output
+= String
.fromCharCode((input
[i
>> 5] >>> (i
% 32)) & 0xff)
}
return output
}
function rstr2binl (input
) {
var i
var output
= []
output
[(input
.length
>> 2) - 1] = undefined
for (i
= 0; i
< output
.length
; i
+= 1) {
output
[i
] = 0
}
var length8
= input
.length
* 8
for (i
= 0; i
< length8
; i
+= 8) {
output
[i
>> 5] |= (input
.charCodeAt(i
/ 8) & 0xff) << (i
% 32)
}
return output
}
function rstrMD5 (s
) {
return binl2rstr(binlMD5(rstr2binl(s
), s
.length
* 8))
}
function rstrHMACMD5 (key
, data
) {
var i
var bkey
= rstr2binl(key
)
var ipad
= []
var opad
= []
var hash
ipad
[15] = opad
[15] = undefined
if (bkey
.length
> 16) {
bkey
= binlMD5(bkey
, key
.length
* 8)
}
for (i
= 0; i
< 16; i
+= 1) {
ipad
[i
] = bkey
[i
] ^ 0x36363636
opad
[i
] = bkey
[i
] ^ 0x5c5c5c5c
}
hash
= binlMD5(ipad
.concat(rstr2binl(data
)), 512 + data
.length
* 8)
return binl2rstr(binlMD5(opad
.concat(hash
), 512 + 128))
}
function rstr2hex (input
) {
var hexTab
= '0123456789abcdef'
var output
= ''
var x
var i
for (i
= 0; i
< input
.length
; i
+= 1) {
x
= input
.charCodeAt(i
)
output
+= hexTab
.charAt((x
>>> 4) & 0x0f) + hexTab
.charAt(x
& 0x0f)
}
return output
}
function str2rstrUTF8 (input
) {
return unescape(encodeURIComponent(input
))
}
function rawMD5 (s
) {
return rstrMD5(str2rstrUTF8(s
))
}
function hexMD5 (s
) {
return rstr2hex(rawMD5(s
))
}
function rawHMACMD5 (k
, d
) {
return rstrHMACMD5(str2rstrUTF8(k
), str2rstrUTF8(d
))
}
function hexHMACMD5 (k
, d
) {
return rstr2hex(rawHMACMD5(k
, d
))
}
function md5 (string
, key
, raw
) {
if (!key
) {
if (!raw
) {
return hexMD5(string
)
}
return rawMD5(string
)
}
if (!raw
) {
return hexHMACMD5(key
, string
)
}
return rawHMACMD5(key
, string
)
}
if (typeof define
=== 'function' && define
.amd
) {
define(function () {
return md5
})
} else if (typeof module
=== 'object' && module
.exports
) {
module
.exports
= md5
} else {
$
.md5
= md5
}
})(this)