微信 JSAPI 支付(微信公众号)

公众号支付必须从微信应用内浏览器发起。 它们无法从其他浏览器(例如 Chrome 或 Safari)启动。
JSAPI 支付类型
Note: 加拿大地区的商户,请参阅此部分了解支付请求和响应参数,其中“pay_type”为800207。
JSAPI 支付有两种不同的实现方法。
1. 拥有实名认证的公众号JSAPI支付
对于这种集成,商户需要在微信上注册自己的公众号,我们会将公众号与商户的QFPay支付账户绑定。 在这种情况下,商家可以创建和发布自己的内容、访问客户信息并收集自己的关注者。 选择该实现方式时,商户需要获取“oauth_code”、用户“openid”,并通过官方微信平台触发微信支付。 商户只需参考QFPay交易查询API接口即可。
Step 1: 开发者在微信公众号平台完成实名认证后,即可使用微信公众号支付。 认证完成后,开发者可以获得认证公众账号的openid参数。 请参考官方微信文档,了解更多信息。
Step 2: 通过提供指定的openid
请求QFPAY订单支付接口/trade/v1/ payment
并返回pay_params
数据,具体说明请参考 支付API端点.
Step 3: 商户认证申请时打开JSAPI支付授权目录发起支付。 更多详情请参考 微信支付官方文档.
2. 未拥有实名认证的公众号JSAPI支付
对于此类支付,商户可以基于QFPay的公众号进行。 此整合仅适用于使用间接结算选项(即由 QFPay 提供结算)的商户。 对于此实现,商户应使用 QFPay 的 API 获取“oauth_code”、用户“openid”并触发微信支付,如下所述。
获取微信oauth_code
GET WeChat oauth_code request:
{
https://test-openapi-hk.qfapi.com/tool/v1/get_weixin_oauth_code?app_code=5D81D64E602043F7AF51CEXXXXXXXXXX&sign=F4D8FB00894F213993B33116BC1B4E10&redirect_uri=https://sdk.qfapi.com
}
import hashlib
import requests
from flask import Flask, redirect
from flask import request
import json
import random
import datetime
import string
import urllib
import urllib.parse
# Enter Client Credentials
environment = 'https://test-openapi-hk.qfapi.com'
app_code = "******"
client_key = "******"
# Create MD5 signature
def make_req_sign(data, key):
keys = list(data.keys())
keys.sort()
p = []
for k in keys:
v = data[k]
p.append('%s=%s'%(k,v))
unsign_str = ('&'.join(p) + key).encode("utf-8")
s = hashlib.md5(unsign_str).hexdigest()
return s.upper()
def get_out_code():
# Body payload
redirect_uri = 'http://49ae4dbd47a6.ngrok.io/getcode'
data = {'app_code': app_code, 'redirect_uri': redirect_uri}
sign = make_req_sign(data, client_key)
return environment+"/tool/v1/get_weixin_oauth_code?app_code="+app_code+"&sign="+sign+"&redirect_uri="+redirect_uri #+"&mchid="+mchid
Redirect to URL after the GET oauth_code request has been successful:
{
"http://xg.fshop.top/index.php/wap/pay/wxredirect?showwxpaytitle=1&code=011QipnO1yMIla1VJdoO1FUrnO1Qipnv"
}
HTTP请求
GET ../tool/v1/get_weixin_oauth_code
app_code
和 sign
都必须作为参数提交,而不是在 http 标头中提交。 该URL请求必须在微信环境中发送。 每次发起支付都需要重新获取微信oauth_code
和openid
。
请求参数
參數名稱 | 參數編碼 | 是否必填 | 參數類型 | 描述 |
---|---|---|---|---|
开发者ID | app_code | 是 | String(32) | app_code由QFPay分配给合作伙伴 |
回调地址 | redirect_uri | 是 | String(512) | 请求成功后,用户将被重定向到回调地址 |
商戶ID | mchid | 否 | String(16) | “mchid”是QFPay为每个商户分配的唯一标识 |
簽名 | sign | 是 | String | 根据统一框架获得的签名 |