微信支付接入流程(PC网站)-Python

本文流程实现目标: 以pc生成二维码扫码支付(Native支付),微信直接扫二维码即可支付(不需要前端参与扫码逻辑处理)即可实现支付


微信支付接入流程(PC网站)-Python_第1张图片
image.png
各个平台说明

https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/ico-guide/chapter1_1.shtml

微信支付接入流程(PC网站)-Python_第2张图片
image.png
前提:申请为服务商

在微信支付平台(商户平台)中申请
点击https://pay.weixin.qq.com/index.php/apply/applyment_home/guide_normal,然后

申请过程中会出现选择场景的


微信支付接入流程(PC网站)-Python_第3张图片
image.png

Native支付场景

微信支付接入流程(PC网站)-Python_第4张图片
image.png
前提:已经有公众号

接入流程

1 登陆支付平台(商户平台)

https://pay.weixin.qq.com/index.php
登陆之后界面如下

微信支付接入流程(PC网站)-Python_第5张图片
image.png

2 在产品中心中开通Native支付功能

微信支付接入流程(PC网站)-Python_第6张图片
image.png

3 关联公众号(发起商户信息关联)

在支付平台(商户平台)的产品中心里面的AppID帐号管理可以关联AppID帐号(在审核商户时会填写一个AppID),可以看到是有一个待授权状态


微信支付接入流程(PC网站)-Python_第7张图片
image.png

4 到公众管理平台登陆公众号进行商户号授权确认

登陆 https://mp.weixin.qq.com
点击左侧支付中心 对待审核的商户号关联进行审核确认

微信支付接入流程(PC网站)-Python_第8张图片
image.png

点击授权


image.png

然后返回公众号左侧支付中心,可以看到关联成功的商户信息


image.png

5 到微信支付平台手动设置32位随机的API密钥

在设置API密钥里面填入自己生成的随机32位字符

apt install pwgen
pwgen -s 32 1
微信支付接入流程(PC网站)-Python_第9张图片
image.png

6 统一下单说明

文档地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1

统一下单的目的是生成预支付订单信息、生成支付二维码,支付成功后会通知你设置的请求地址告诉你支付成功

统一下单在传入类型为NATIVE的时候,能够返回微信支付直接扫码的二维码(不需要前端参与扫码),同时统一下单的时候需要生成自己的订单信息,这个订单自己标识为预付款。此参数如下


image.png

支付成功之后会回调你服务器地址,你需要校验回调数据的参数,确定无误(防止其它恶意伪造)自己业务修改订单(根据out_trade_no)状态为已支付。

这里需要说明的几个参数

  • trade_type 支付类型,本文使用Native支付,也就是NATIVE
  • product_id trade_type=NATIVE时,此参数必传。此参数为二维码中包含的商品ID,商户自行定义。
  • out_trade_no 自己订单号,此参数用于自己查询订单,以及在通知回调的时候微信会带上给你(用于修改该订单状态为已经支付完成)
  • code_url 在trade_type为NATIVE的时候,会有此字段,此字段直接转化为二维码,微信一扫就可以支付了
  • notify_url 异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。

源码Demo

使用的Python微信库是 https://github.com/zwczou/weixin-python

1 初始化环境(python3.6)

mkdir wxpay_test
cd wxpay_test
virtualenv .venv
source .venv/bin/activate
touch main.py
pip install -i https://pypi.douban.com/simple weixin-python
code .

2 Code

from weixin import Weixin, WeixinError, WeixinPay
config = {
    'WEIXIN_APP_ID': 'xxx', # 公众号
    'WEIXIN_MCH_ID': 'xxx',
    'WEIXIN_MCH_KEY': 'xxx',
    'WEIXIN_NOTIFY_URL': 'xxx',
    'WEIXIN_MCH_CERT_FILE': ''
}
wx_pay = WeixinPay(config['WEIXIN_APP_ID'], config['WEIXIN_MCH_ID'], config['WEIXIN_MCH_KEY'], config['WEIXIN_NOTIFY_URL'])
try:
    out_trade_no = wx_pay.nonce_str
    raw = wx_pay.unified_order(trade_type="NATIVE", openid="", body=u"测试", out_trade_no=out_trade_no, total_fee=1, attach="other info", product_id='12235413214070356458058')
    print(raw)
except WeixinError as e:
    print(e)

运行之后,将返回的支付链接生成二维码,手机微信扫码即可支付

你可能感兴趣的:(微信支付接入流程(PC网站)-Python)