微信支付是目前非常常用的支付方式之一,其依托微信平台很好的实现了支付的便捷性与安全性。本文将从前端的角度来梳理微信支付的流程,帮助读者更好地了解微信支付的全貌。
1. 微信支付介绍
微信支付是腾讯公司于2014年推出的一种移动支付方式,用户可以利用微信账号进行支付与转账等操作。截至目前,微信支付已经支持包括人民币、美元、澳元等各种货币的支付功能,并且其支付流程非常简便,无需多余的操作步骤,方便快捷。
2. 微信支付流程
微信支付的流程可以分为以下几个步骤:
2.1 准备工作
在开始使用微信支付之前,我们需要完成以下几个准备工作:
- 在微信后台注册并绑定商户号
- 申请开通微信支付功能
- 获取公众号AppID和商户号MchID
2.2 用户下单
在开始支付之前,用户需要先下单,提交需要购买的商品信息,以及选择支付方式等。
$.ajax({
type: 'POST',
url: '/order',
dataType: 'json',
data: {
product_id: '123',
product_name: '测试商品',
total_fee: 100
},
success: function(data) {
// 下单成功回调函数
},
error: function(error) {
// 下单失败回调函数
}
});
可以看到,我们使用了ajax技术来向服务器提交了下单信息,其中product_id代表商品的唯一标识符,product_name代表商品名称,total_fee代表商品价格。
2.3 生成预支付订单
下单成功后,服务器会生成一个预支付订单,并在返回的数据中携带一个prepay_id。
{
appid: 'wx1e73a009f5xxxxx',
mch_id: '1234567890',
nonce_str: '7AFlZrlDakA1',
prepay_id: 'wx20170427215813728653',
sign: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
}
可以看到,prepay_id是我们接下来需要使用的重要参数,它是微信支付的核心所在。
2.4 生成支付参数并发起支付
我们需要把预支付订单信息进行签名,并在本地存储或传给所有需要进行支付的客户端,客户端使用此信息来发起支付请求。
function generatePayParams(prepay_id) {
var timestamp = parseInt(new Date().getTime()/1000);
var nonce_str = 'JYeKt4UTGZVwG9Wx';
var payParams = {
appId: 'wx1e73a009f5xxxxx',
timeStamp: timestamp,
nonceStr: nonce_str,
package: 'prepay_id=' + prepay_id, // 重要参数
signType: 'MD5'
}
var tempString = 'appid=' + payParams.appId
+ '&nonceStr=' + payParams.nonceStr
+ '&package=' + payParams.package
+ '&signType=' + payParams.signType
+ '&timeStamp=' + payParams.timeStamp
+ '&key=' + '你的商户密钥';
payParams.paySign = md5(tempString).toUpperCase();
return payParams;
}
// 发送支付请求
function weixinPay(payParams) {
WeixinJSBridge.invoke('getBrandWCPayRequest', payParams, function(res){
if (res.err_msg == 'get_brand_wcpay_request:ok') {
// 付款成功回调函数
} else if (res.err_msg == 'get_brand_wcpay_request:fail') {
// 付款失败回调函数
}
});
}
// 调用微信支付
weixinPay(generatePayParams(prepay_id));
上述代码中,generatePayParams函数用于生成支付参数,其中重要参数package就是预支付订单中的prepay_id。我们使用md5算法对拼接好的字符串进行签名,并将签名后的结果写入paySign参数中,在最后使用微信JSAPI(WeixinJSBridge.invoke)进行支付请求。
2.5 支付结果的查询和处理
支付成功或失败的结果需要通过查询接口来获取,微信提供了相应的查询接口,开发者可以轻松地通过接口获取支付结果。
// 查询支付结果
function queryPayResult(prepay_id) {
$.ajax({
type: 'POST',
url: '/query',
dataType: 'json',
data: {
prepay_id: prepay_id
},
success: function(data) {
if (data.trade_state == 'SUCCESS') {
// 付款成功回调函数
} else {
// 付款失败回调函数
}
},
error: function(error) {
// 查询失败回调函数
}
});
}
3. 总结
本文从前端的角度来梳理了微信支付的流程,主要包括准备工作、用户下单、生成预支付订单、生成支付参数并发起支付、支付结果的查询和处理等几个方面。希望可以帮助读者更好地理解微信支付的全貌,并且在开发微信支付时顺利进行。 需要注意的一点是,微信支付的安全性非常重要,因此在开发过程中一定要保证数据的安全性和准确性,并避免进行违规操作。