开通微信支付流程

开通微信支付流程

1. 注册微信支付商户账号

访问微信支付商户平台:前往微信支付商户平台。注册账户:根据提示注册微信支付商户号,填写相关信息并提交审核。

2. 配置开发环境

登录微信支付商户平台:使用商户号和密码登录微信支付商户平台。获取商户号和密钥:在左侧菜单中选择「账户中心」-「账户设置」-「商户信息」,获取商户号。在左侧菜单中选择「账户中心」-「账户设置」-「API安全」,设置API密钥(32位的随机字符串),并保存。

3. 开通微信支付功能

进入功能配置:在左侧菜单中选择「产品中心」,选择需要开通的支付产品(如JSAPI支付)。按照提示进行开通和配置,填写相关信息。

4. 配置支付目录

设置支付授权目录:在左侧菜单中选择「产品中心」-「开发配置」。在「支付授权目录」中添加你的Uni-App小程序的支付目录,比如https://yourappdomain.com/pay/。

5. 获取证书

下载API证书:在左侧菜单中选择「账户中心」-「账户设置」-「API安全」,下载API证书(包括apiclient_cert.pem和apiclient_key.pem)。

6. 在小程序后台绑定微信支付

登录微信公众平台:前往微信公众平台并登录。

绑定微信支付商户号:

在左侧菜单中选择「小程序管理」-「开发」-「开发设置」。在「微信支付」一栏中,点击「绑定商户号」,输入商户号并进行绑定。

7. 后端服务器配置

7.1 安装依赖

你需要安装一个微信支付的Python SDK,比如wechatpy。

pip install wechatpy

7.2 在后端服务器中,配置微信支付接口。

7.2.1 初始化微信支付

你需要配置微信支付的参数,包括appid、mch_id、api_key、以及证书路径。

from wechatpy import WeChatPay

config = {

"appid": "your_app_id",

"mch_id": "your_mch_id",

"api_key": "your_api_key",

"mch_cert": "/path/to/apiclient_cert.pem",

"mch_key": "/path/to/apiclient_key.pem",

"notify_url": "https://yourappdomain.com/pay/notify",

}

wechatpay = WeChatPay(config["appid"], config["api_key"], config["mch_id"],

mch_cert=config["mch_cert"], mch_key=config["mch_key"])

7.2.2 创建统一下单接口

在你的后端实现统一下单接口。

from flask import Flask, request, jsonify

import random

import string

app = Flask(__name__)

def generate_order_id():

return ''.join(random.choices(string.ascii_uppercase + string.digits, k=16))

@app.route('/pay/unifiedorder', methods=['POST'])

def create_order():

data = request.json

openid = data.get('openid')

order_id = generate_order_id()

total_fee = data.get('total_fee') # 单位:分

order = wechatpay.order.create({

'trade_type': 'JSAPI',

'body': '商品描述',

'total_fee': total_fee,

'notify_url': config['notify_url'],

'out_trade_no': order_id,

'openid': openid,

})

return jsonify(order)

if __name__ == '__main__':

app.run(debug=True)

7.2.3 接收支付通知

实现支付通知接口,处理微信支付的异步通知。

from flask import Flask, request

from wechatpy.utils import check_signature

from wechatpy.exceptions import InvalidSignatureException

@app.route('/pay/notify', methods=['POST'])

def notify():

try:

wechatpay.parse_payment_result(request.data)

# 处理订单状态

return wechatpay.reply('SUCCESS', 'OK')

except InvalidSignatureException:

return wechatpay.reply('FAIL', 'Invalid signature')

7.2.4 小程序前端调用微信支付

在小程序前端,调用你后端的统一下单接口,获取支付参数,并调用微信支付接口进行支付。

wx.request({

url: 'https://yourappdomain.com/pay/unifiedorder',

method: 'POST',

data: {

openid: '用户的openid',

total_fee: '商品总价(分)'

},

success(res) {

const paymentData = res.data;

wx.requestPayment({

timeStamp: paymentData.timeStamp,

nonceStr: paymentData.nonceStr,

package: paymentData.package,

signType: 'MD5',

paySign: paymentData.paySign,

success(paymentRes) {

// 支付成功处理

},

fail(err) {

// 支付失败处理

}

});

}

});

8. openid 获取步骤

8.1 前端小程序获取用户登录凭证(code),后与后端交互获取openid

微信小程序的用户登录是通过 wx.login 方法获取登录凭证(code)。

wx.login({

success: function(res) {

if (res.code) {

// 发起网络请求,发送 code 到后端服务器

wx.request({

url: 'https://yourappdomain.com/get_openid',

method: 'POST',

data: {

code: res.code

},

success: function(response) {

// 得到 openid

const openid = response.data.openid;

}

});

} else {

console.log('登录失败!' + res.errMsg);

}

}

});

8.2 后端服务器使用 code 获取用户的 openid

后端服务器需要使用微信提供的接口,通过 code 换取 openid 和 session_key。

8.2.1 获取 openid 和 session_key

微信提供的接口 URL:

https://api.weixin.qq.com/sns/jscode2session?appid=YOUR_APPID&secret=YOUR_SECRET&js_code=JSCODE&grant_type=authorization_code

8.2.2 后端处理代码示例(使用 Flask 和 Requests)

import requests

from flask import Flask, request, jsonify

app = Flask(__name__)

APPID = 'your_app_id'

SECRET = 'your_app_secret'

@app.route('/get_openid', methods=['POST'])

def get_openid():

code = request.json.get('code')

if not code:

return jsonify({'error': 'code is required'}), 400

url = f'https://api.weixin.qq.com/sns/jscode2session?appid={APPID}&secret={SECRET}&js_code={code}&grant_type=authorization_code'

response = requests.get(url)

data = response.json()

if 'openid' in data:

return jsonify({'openid': data['openid']})

else:

return jsonify({'error': 'Failed to get openid'}), 400

if __name__ == '__main__':

app.run(debug=True)

8.2.3 将 openid 用于支付请求

当你获取到 openid 后,可以在支付请求中使用它。

@app.route('/pay/unifiedorder', methods=['POST'])

def create_order():

data = request.json

openid = data.get('openid')

order_id = generate_order_id()

total_fee = data.get('total_fee') # 单位:分

order = wechatpay.order.create({

'trade_type': 'JSAPI',

'body': '商品描述',

'total_fee': total_fee,

'notify_url': config['notify_url'],

'out_trade_no': order_id,

'openid': openid,

})

return jsonify(order)

9、测试与上线

测试支付功能:在测试环境下进行全面测试,确保支付流程正确。上线支付功能:测试无误后,将支付功能上线。通过以上步骤,你可以将微信支付功能集成到你的Uni-App小程序中。如果遇到任何问题,可以参考微信支付的官方文档或寻求帮助。

相关文章

网易云音乐在哪里移除粉丝 网易云音乐移除粉丝方法【详解】
孕妇必吃的12种蔬菜
mobile 365365051

孕妇必吃的12种蔬菜

📅 08-14 👁️ 2983
阴阳师最快过痴阵容
mobile 365365051

阴阳师最快过痴阵容

📅 08-20 👁️ 9240