跳到主要内容

微信支付

微信支付是集成微信支付官方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文件

e.json配置
{
"type": "pays.WechatPayType",
"title": "我的微信支付",
"mchId": "1234567890",
"apiKey": "your_api_key_here",
"frontBundleEntry": "./myWechatPay.json",
"backendBundleEntry": "."
}

业务配置文件

myWechatPay.json
{
"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配置

配置项类型必填说明
typestring固定值 "pays.WechatPayType"
titlestring元素显示名称
mchIdstring微信商户号
apiKeystring微信支付API密钥
frontBundleEntrystring前端配置文件路径
backendBundleEntrystring后端代码目录路径,默认为 "."

业务配置文件配置

配置项类型必填说明
appIdstring微信应用ID(公众号或小程序AppId)
mchIdstring微信商户号
apiKeystring微信支付API密钥

方法

create

创建内部订单记录,生成订单号并初始化订单状态。

参数详解

参数名类型对应原生类型必填说明
subjectStextstr订单标题,支付页面显示的商品描述
amountNumericfloat订单金额,单位为元
orderIdStextstr自定义订单号,不填则自动生成

返回值

返回订单对象,包含订单号、状态等信息。

使用示例

创建订单
# 自动生成订单号
order = wechat_pay.create(
subject="商品购买",
amount=199.50
)

# 指定订单号
order = wechat_pay.create(
subject="VIP会员充值",
amount=99.00,
orderId="CUSTOM20231120001"
)

getPayUrl

调用微信支付API创建支付订单,返回支付链接。

参数详解

参数名类型对应原生类型必填说明
orderIdStextstr订单号
payTypeStextstr支付类型,默认NATIVE(扫码支付)

返回值

返回包含支付链接的字典对象:

{
"payUrl": "weixin://wxpay/bizpayurl?pr=xxx",
"form": ""
}

使用示例

获取支付链接
# 扫码支付
result = wechat_pay.getPayUrl(
orderId="D20231120161615000001",
payType="NATIVE"
)
pay_url = result["payUrl"]

notify

接收微信支付回调通知,处理支付结果。

参数详解

参数名类型对应原生类型必填说明
xmlStextstr微信发送的XML格式回调数据

返回值

返回处理结果状态。

使用示例

处理支付回调
# 通常在回调接口中调用
result = wechat_pay.notify(xml_data)

check

主动查询第三方订单状态并更新本地订单。

参数详解

参数名类型对应原生类型必填说明
orderIdStextstr订单号

返回值

返回操作成功状态。

使用示例

查询订单状态
# 用户点击"已完成支付"时调用
result = wechat_pay.check("D20231120161615000001")

cancel

取消订单,同时取消第三方订单和本地订单。

参数详解

参数名类型对应原生类型必填说明
orderIdStextstr订单号

返回值

返回操作成功状态。

使用示例

取消订单
# 用户主动取消订单
result = wechat_pay.cancel("D20231120161615000001")

checkThird

调用微信API查询订单状态并更新微信支付记录表。

参数详解

参数名类型对应原生类型必填说明
payLogObjectobject支付记录对象

返回值

返回微信支付记录对象。

使用示例

查询第三方状态
# 内部方法,通常不直接调用
pay_log = app.getElement("pays.models.PayLogModel").queryset.get(orderId=order_id)
wechat_log = wechat_pay.checkThird(pay_log)

cancelThird

调用微信API取消第三方订单。

参数详解

参数名类型对应原生类型必填说明
orderIdStextstr订单号

返回值

返回操作成功状态。

使用示例

取消第三方订单
# 内部方法,通常不直接调用
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")