微信支付
微信支付是集成微信支付官方API的支付处理元素,基于微信支付V2API实现扫码支付、H5支付、小程序支付等多种支付方式。它负责订单创建、支付状态查询和回调通知处理,提供微信生态内的无缝支付体验。微信支付适用于微信小程序、公众号、APP等微信生态应用场景,通过标准化API简化支付集成复杂度。
微信支付元素分层结构为Meta(pays.Meta) → Type(pays.WechatPayType) → 实例,开发者可通过JitAi的可视化开发工具快捷地创建微信支付实例元素。
当然,开发者也可以创建自己的Type元素,或者在自己的App中改写JitAi官方提供的pays.WechatPayType元素,以实现自己的封装。
快速开始
创建实例元素
目录结构
pays/
└── myWechatPay/
├── e.json
└── myWechatPay.json
e.json文件
{
"type": "pays.WechatPayType",
"title": "我的微信支付",
"mchId": "1234567890",
"apiKey": "your_api_key_here",
"frontBundleEntry": "./myWechatPay.json",
"backendBundleEntry": "."
}
业务配置文件
{
"config": {
"appId": "wx1234567890abcdef",
"mchId": "1234567890",
"apiKey": "abcdef1234567890abcdef1234567890"
}
}
调用示例
# 获取微信支付元素
wechat_pay = app.getElement("pays.myWechatPay")
# 创建订单
order = wechat_pay.create(
subject="商品购买",
amount=99.99,
orderId="D20231120161615000001"
)
# 获取支付链接
pay_result = wechat_pay.getPayUrl(
orderId="D20231120161615000001",
payType="NATIVE"
)
# 查询订单状态
wechat_pay.check("D20231120161615000001")
# 取消订单
wechat_pay.cancel("D20231120161615000001")
元素配置
e.json配置
配置项 | 类型 | 必填 | 说明 |
---|---|---|---|
type | string | 是 | 固定值 "pays.WechatPayType" |
title | string | 是 | 元素显示名称 |
mchId | string | 是 | 微信商户号 |
apiKey | string | 是 | 微信支付API密钥 |
frontBundleEntry | string | 否 | 前端配置文件路径 |
backendBundleEntry | string | 否 | 后端代码目录路径,默认为 "." |
业务配置文件配置
配置项 | 类型 | 必填 | 说明 |
---|---|---|---|
appId | string | 是 | 微信应用ID(公众号或小程序AppId) |
mchId | string | 是 | 微信商户号 |
apiKey | string | 是 | 微信支付API密钥 |
方法
create
创建内部订单记录,生成订单号并初始化订单状态。
参数详解
参数名 | 类型 | 对应原生类型 | 必填 | 说明 |
---|---|---|---|---|
subject | Stext | str | 是 | 订单标题,支付页面显示的商品描述 |
amount | Numeric | float | 是 | 订单金额,单位为元 |
orderId | Stext | str | 否 | 自定义订单号,不填则自动生成 |
返回值
返回订单对象,包含订单号、状态等信息。
使用示例
# 自动生成订单号
order = wechat_pay.create(
subject="商品购买",
amount=199.50
)
# 指定订单号
order = wechat_pay.create(
subject="VIP会员充值",
amount=99.00,
orderId="CUSTOM20231120001"
)
getPayUrl
调用微信支付API创建支付订单,返回支付链接。
参数详解
参数名 | 类型 | 对应原生类型 | 必填 | 说明 |
---|---|---|---|---|
orderId | Stext | str | 是 | 订单号 |
payType | Stext | str | 否 | 支付类型,默认NATIVE(扫码支付) |
返回值
返回包含支付链接的字典对象:
{
"payUrl": "weixin://wxpay/bizpayurl?pr=xxx",
"form": ""
}
使用示例
# 扫码支付
result = wechat_pay.getPayUrl(
orderId="D20231120161615000001",
payType="NATIVE"
)
pay_url = result["payUrl"]
notify
接收微信支付回调通知,处理支付结果。
参数详解
参数名 | 类型 | 对应原生类型 | 必填 | 说明 |
---|---|---|---|---|
xml | Stext | str | 是 | 微信发送的XML格式回调数据 |
返回值
返回处理结果状态。
使用示例
# 通常在回调接口中调用
result = wechat_pay.notify(xml_data)
check
主动查询第三方订单状态并更新本地订单。
参数详解
参数名 | 类型 | 对应原生类型 | 必填 | 说明 |
---|---|---|---|---|
orderId | Stext | str | 是 | 订单号 |
返回值
返回操作成功状态。
使用示例
# 用户点击"已完成支付"时调用
result = wechat_pay.check("D20231120161615000001")
cancel
取消订单,同时取消第三方订单和本地订单。
参数详解
参数名 | 类型 | 对应原生类型 | 必填 | 说明 |
---|---|---|---|---|
orderId | Stext | str | 是 | 订单号 |
返回值
返回操作成功状态。
使用示例
# 用户主动取消订单
result = wechat_pay.cancel("D20231120161615000001")
checkThird
调用微信API查询订单状态并更新微信支付记录表。
参数详解
参数名 | 类型 | 对应原生类型 | 必填 | 说明 |
---|---|---|---|---|
payLog | Object | object | 是 | 支付记录对象 |
返回值
返回微信支付记录对象。
使用示例
# 内部方法,通常不直接调用
pay_log = app.getElement("pays.models.PayLogModel").queryset.get(orderId=order_id)
wechat_log = wechat_pay.checkThird(pay_log)
cancelThird
调用微信API取消第三方订单。
参数详解
参数名 | 类型 | 对应原生类型 | 必填 | 说明 |
---|---|---|---|---|
orderId | Stext | str | 是 | 订单号 |
返回值
返回操作成功状态。
使用示例
# 内部方法,通常不直接调用
result = wechat_pay.cancelThird("D20231120161615000001")
generateOrderId
生成唯一订单号。
返回值
返回格式为"D" + 时间戳 + 6位随机数的订单号字符串。
使用示例
order_id = wechat_pay.generateOrderId()
# 例如:D202311201616150000001
属性
fullName
支付元素的完整名称。
config
支付配置信息,包含appId、mchId、apiKey等参数。
appId
微信应用ID。
mchId
微信商户号。
apiKey
微信支付API密钥。
高级特性
回调通知处理
微信支付支持自动处理支付回调通知,当用户完成支付后,微信会向指定的回调地址发送支付结果。系统会自动解析回调数据并更新订单状态。
# 回调URL自动生成,格式为:
# {host}/api/{app}/pays/services/PaySvc/wechatNotify
# 获取回调URL
notify_url = wechat_pay.getNotifyUrl()
支付状态管理
微信支付提供完整的支付状态追踪,包括等待支付、支付成功、支付失败、订单关闭等状态。系统会维护本地订单表和微信订单表的状态同步。
# 获取订单模型
PayLogModel = app.getElement("pays.models.PayLogModel")
order = PayLogModel.queryset.get(orderId=order_id)
# 检查订单状态
if order.status.value == "success":
print("支付已完成")
elif order.status.value == "wait":
print("等待支付")
多支付方式支持
微信支付支持多种支付类型,包括NATIVE扫码支付、H5支付、小程序支付等。开发者可根据应用场景选择合适的支付方式。
# 扫码支付(默认)
result = wechat_pay.getPayUrl(orderId, "NATIVE")
# H5支付
result = wechat_pay.getPayUrl(orderId, "MWEB")
# 小程序支付
result = wechat_pay.getPayUrl(orderId, "JSAPI")