微信小程序体验版的支付测试单怎样自动退款?
2026-11-06 3469095
2026-11-06 0
正式上线先确认生产商户配置、接口与订单库,再按支付、退款和对账验证一笔订单。
把下列代码保存为 gate.py,用 Python 3.9.6 执行。示例只检查项目内部配置标签。用同一套生产设置作基线,分别把回调标签和订单库标签改为 test。
from dataclasses import dataclass, replace
@dataclass(frozen=True)
class Route:
environment: str
endpoint: str
merchant_profile: str
notify_profile: str
order_profile: str
def ready(route):
return (
route.environment == "prod"
and route.endpoint == "/v3/pay/transactions/jsapi"
and route.merchant_profile == "prod"
and route.notify_profile == "prod"
and route.order_profile == "prod"
)
prod = Route("prod", "/v3/pay/transactions/jsapi", "prod", "prod", "prod")
cases = {
"production": prod,
"test notification": replace(prod, notify_profile="test"),
"test order store": replace(prod, order_profile="test"),
}
assert [ready(x) for x in cases.values()] == [True, False, False]
for name, route in cases.items():
print(name, "ready" if ready(route) else "blocked")
# 实际输出
# production ready
# test notification blocked
# test order store blocked生产路径对了,回调仍可能写到测试库。将标签检查放在发送请求之前,并核对配置实际指向生产。校验示例不读取密钥,也无法验证证书和权限。
核对商户号已开通 JSAPI,AppID 已绑定,用户标识属于同一 AppID。准备签名私钥与证书序列号,按接入方式配置微信支付公钥或平台证书用于验签,另用 APIv3 密钥解密通知。回调地址应当可达,避免将密钥和完整通知写进日志。
POST /v3/pay/transactions/jsapi
# 接收 prepay_id
GET /v3/pay/transactions/out-trade-no/{out_trade_no}?mchid={mchid}
# 核对 trade_state、订单号与金额测试时从白名单入口发起一笔事先获准的生产验证订单,确认客户端完成支付。服务端凭已验证的通知或主动查单更新状态。预支付成功只说明可继续拉起支付。
用原订单申请退款,保存唯一的 out_refund_no。确认退款终态后,将原订单、退款单和核对。若首笔交易状态有分歧,先关闭新的生产入口,继续处理已经发出的生产订单及其回调。查询、退款和对账都应留在这笔订单所在环境。
POST /v3/refund/domestic/refunds
GET /v3/refund/domestic/refunds/{out_refund_no}
# 核对退款单号、金额和 status配置校验通过后再做真实交易验收。已有订单继续由所属环境处理,确认生产链路后逐步放量。本文执行的是本地配置检查,未发起生产交易。