从前端的角度来梳理微信支付的流程

微信支付是目前非常常用的支付方式之一,其依托微信平台很好的实现了支付的便捷性与安全性。本文将从前端的角度来梳理微信支付的流程,帮助读者更好地了解微信支付的全貌。

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. 总结

本文从前端的角度来梳理了微信支付的流程,主要包括准备工作、用户下单、生成预支付订单、生成支付参数并发起支付、支付结果的查询和处理等几个方面。希望可以帮助读者更好地理解微信支付的全貌,并且在开发微信支付时顺利进行。 需要注意的一点是,微信支付的安全性非常重要,因此在开发过程中一定要保证数据的安全性和准确性,并避免进行违规操作。