# 【修复版 v1.2.36】微信支付 API v3 Python SDK
## 介绍
微信支付接口 V3 版 python 库。
## 适用对象
**wechatpayv3**同时支持微信支付[直连模式](https://pay.weixin.qq.com/wiki/doc/apiv3/index.shtml)及[服务商模式](https://pay.weixin.qq.com/wiki/doc/apiv3_partner/index.shtml),接口说明详见官网。
## 特性
1. 平台证书自动更新,无需开发者关注平台证书有效性,无需手动下载更新;
2. 支持本地缓存平台证书,初始化时指定平台证书保存目录即可;
3. 敏感信息直接传入明文参数,SDK 内部自动加密,无需手动处理;
4. 回调通知自动验证回调消息,自动解密 resource 对象,并返回解密后的数据;
5. 已适配[直连模式](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/index.shtml)和[服务商模式](https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/index.shtml)中除“电商收付通”以外所有 v3 版接口。
## 安装
```
$ pip install wechatpayv3-fix
```
## 使用方法
### 准备
参考微信官方文档准备好密钥, 证书文件和配置([证书/密钥/签名介绍](https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay3_0.shtml))
- **商户 API 证书私钥:PRIVATE_KEY**。商户申请商户 API 证书时,会生成商户私钥,并保存在本地证书文件夹的文件 apiclient_key.pem 中。
> :warning: 不要把私钥文件暴露在公共场合,如上传到 Github,写在客户端代码等。
- **商户 API 证书序列号:CERT_SERIAL_NO**。每个证书都有一个由 CA 颁发的唯一编号,即证书序列号。扩展阅读 [如何查看证书序列号](https://wechatpay-api.gitbook.io/wechatpay-api-v3/chang-jian-wen-ti/zheng-shu-xiang-guan#ru-he-cha-kan-zheng-shu-xu-lie-hao)。
- **微信支付 APIv3 密钥:APIV3_KEY**,是在回调通知和微信支付平台证书下载接口中,为加强数据安全,对关键信息 `AES-256-GCM` 加密时使用的对称加密密钥。
### 一个最小的后端
[examples.py](examples.py) 演示了一个带有[Native 支付下单](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_1.shtml)接口和[支付通知](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_5.shtml)接口的后端。
首先,修改 **examplys.py** 里以下几项配置参数:
```python
# 微信支付商户号,服务商模式下为服务商户号,即官方文档中的sp_mchid。
MCHID = '1230000109'
# 商户证书私钥,此文件不要放置在下面设置的CERT_DIR目录里。
with open('path_to_key/apiclient_key.pem') as f:
PRIVATE_KEY = f.read()
# 商户证书序列号
CERT_SERIAL_NO = '444F4864EA9B34415...'
# API v3密钥, https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay3_2.shtml
APIV3_KEY = 'MIIEvwIBADANBgkqhkiG9w0BAQE...'
# APPID,应用ID,服务商模式下为服务商应用ID,即官方文档中的sp_appid,也可以在调用接口的时候覆盖。
APPID = 'wxd678efh567hg6787'
# 回调地址,也可以在调用接口的时候覆盖。
NOTIFY_URL = 'https://www.xxxx.com/notify'
# 微信支付平台证书缓存目录,初始调试的时候可以设为None,首次使用确保此目录为空目录。
CERT_DIR = './cert'
# 日志记录器,记录web请求和回调细节,便于调试排错。
logging.basicConfig(filename=os.path.join(os.getcwd(), 'demo.log'), level=logging.DEBUG, filemode='a', format='%(asctime)s - %(process)s - %(levelname)s: %(message)s')
LOGGER = logging.getLogger("demo")
# 接入模式:False=直连商户模式,True=服务商模式。
PARTNER_MODE = False
# 代理设置,None或者{"https": "http://10.10.1.10:1080"},详细格式参见https://docs.python-requests.org/zh_CN/latest/user/advanced.html
PROXY = None
```
接下来初始化 WechatPay 实例并配置一个合适的接口:
```python
wxpay = WeChatPay(
wechatpay_type=WeChatPayType.NATIVE,
mchid=MCHID,
private_key=PRIVATE_KEY,
cert_serial_no=CERT_SERIAL_NO,
apiv3_key=APIV3_KEY,
appid=APPID,
notify_url=NOTIFY_URL,
cert_dir=CERT_DIR,
logger=LOGGER,
partner_mode=PARTNER_MODE,
proxy=PROXY)
app = Flask(__name__)
@app.route('/pay')
def pay():
# 以native下单为例,下单成功后即可获取到'code_url',将'code_url'转换为二维码,并用微信扫码即可进行支付测试。
out_trade_no = ''.join(sample(ascii_letters + digits, 8))
description = 'demo-description'
amount = 1
code, message = wxpay.pay(
description=description,
out_trade_no=out_trade_no,
amount={'total': amount},
pay_type=WeChatPayType.NATIVE
)
return jsonify({'code': code, 'message': message})
```
检查一下参数无误,现在就可以用 python 解释器来运行:
```shell
$ python examples.py
* Serving Flask app "examples" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
```
现在访问 http://127.0.0.1:5000/pay ,如果一切正常,你会看到下面一串 json 字符串:
```python
{
"code": 200,
"message": "{\"code_url\":\"weixin://wxpay/bizpayurl?pr=abcdefghi\"}"
}
```
到这一步统一下单的后端就完成了,现在将 code_url 的值即"weixin://wxpay/bizpayurl?pr=abcdefghi"用[草料](https://cli.im/)转换为二维码即可用微信扫码进行支付测试。
**以上步骤如果不能正确执行,务必仔细检查各项初始化参数,必要的情况下,登录微信支付后台,将所有参数重置。**
Native 支付调试最简单便捷,调试通过没有问题证明初始化参数正确之后,如果需要采用其他(小程序、H5、JSAPI、APP)支付下单,可继续参考 examples.py。
## 接口清单
已适配的微信支付 V3 版 API 接口列表如下,部分接口调用示例可以参考[这里](interface.md):
| 大类| 小类 | 接口 | 接口函数| 直连商户适用 | 服务商适用 |
| ---- | ---------------------------------------- | ------------------------ | --------------------------------------- | ------------ | ---------- |
| 公用| 公用 | 调起支付签名| sign | 是 | 是 |
| 公用| 公用 | 回调通知| callback | 是 | 是 |
| 公用| 公用 | 敏感信息参数解密 | decrypt | 是 | 是 |
| 公用| 公用 | 下载账单| download_bill| 是 | 是 |
| 商户进件 | 特约商户进件、小微商户进件| 提交申请单 | applyment_submit | 否| 是|
| 商户进件 | 特约商户进件、小微商户进件| 查询申请单状态| applyment_query| 否| 是|
| 商户进件 | 特约商户进件、小微商户进件| 修改结算账号| applyment_settlement_modify| 否| 是|
| 商户进件 | 特约商户进件、小微商户进件| 查询结算账号| applyment_settlement_query| 否| 是|
| 基础支付 | JSAPI、APP、H5、Native、小程序支付| 统一下单 | pay | 是| 是|
| 基础支付 | JSAPI、APP、H5、Native、小程序支付| 查询订单 | query | 是| 是|
| 基础支付 | JSAPI、APP、H5、Native、小程序支付| 关闭订单 | close | 是| 是|
| 基础支付 | 合单支付 | 统一下单 | combine_pay| 是| 是|
| 基础支付 | 合单支付 | 查询订单 | combine_query| 是| 是|
| 基础支付 | 合单支付 | 关闭订单 | combine_close| 是| 是|
| 基础支付 | JSAPI、APP、H5、Native、小程序、合单支付 | 申请退款 | refund| 是| 是|
| 基础支付 | JSAPI、APP、H5、Native、小程序、合单支付 | 查询单笔退款| query_refund | 是| 是|
| 基础支付 | JSAPI、APP、H5、Native、小程序、合单支付 | 申请交易账单| trade_bill | 是| 是|
| 基础支付 | JSAPI、APP、H5、Native、小程序、合单支付 | 申请资金账单| fundflow_bill| 是| 是|
| 基础支付 | JSAPI、APP、H5、Native、小程序、合单支付 | 申请单个子商户资金账单 | submch_fundflow_bill| 否| 是|
| 基础支付 | JSAPI、APP、H5、Native、小程序、合单支付 | 下载账单 | download_bill| 是| 是|
| 经营能力 | 微信支付分(免确认模式) | 创单结单合并| payscore_direct_complete| 是| 否|
| 经营能力 | 微信支付分(免确认预授权模式)| 商户预授权 | payscore_permission | 是| 否|
| 经营能力 | 微信支付分(免确认预授权模式)| 查询用户授权记录| payscore_permission_query | 是| 否|
| 经营能力 | 微信支付分(免确认预授权模式)| 解除用户授权关系| payscore_permission_terminate| 是| 否|
| 经营能力 | 微信支付分(公共 API) | 创建支付分订单| payscore_create| 是| 否|
| 经营能力 | 微信支付分(公共 API) | 查询支付分订单| payscore_query | 是| 否|
| 经营能力 | 微信支付分(公共 API) | 取消支付分订单| payscore_cancel| 是| 否|
| 经营能力 | 微信支付分(公共 API) | 修改订单金额| payscore_modify| 是| 否|
| 经营能力 | 微信支付分(公共 API) | 完结支付分订单| payscore_complete| 是| 否|
| 经营能力 | 微信支付分(公共 API) | 商户发起催收扣款| payscore_pay | 是| 否|
| 经营能力 | 微信支付分(公共 API) | 同步服务订单信息| payscore_sync| 是| 否|
| 经营能力 | 微信支付分(公共 API) | 申请退款 | payscore_refund| 是| 否|
| 经营能力 | 微信支付分(公共 API) | 查询单笔退款| payscore_refund_query | 是| 否|
| 经营能力 | 微信支付分(公共 API) | 商户申请获取对账单| payscore_merchant_bill| 是| 否|
| 经营能力 | 支付即服务| 服务人员注册| guides_register| 是| 是|
| 经营能力 | 支付即服务| 服务人员分配| guides_assign| 是| 是|
| 经营能力 | 支付即服务| 服务人员查询| guides_query | 是| 是|
| 经营能力 | 支付即服务| 服务人员信息更新| guides_update| 是| 是|
| 经营能力 | 点金计划 | 点金计划管理| goldplan_plan_change| 否| 是|
| 经营能力 | 点金计划 | 商家小票管理| goldplan_custompage_change| 否| 是|
| 经营能力 | 点金计划 | 同业过滤标签管理| goldplan_advertising_filter| 否| 是|
| 经营能力 | 点金计划 | 开通广告展示| goldplan_advertising_open | 否| 是|
| 经营能力 | 点金计划 | 关闭广告展示| goldplan_advertising_close| 否| 是|
| 行业方案 | 电商收付通| 尚未适配 | 尚未适配| 否| 是|
| 行业方案 | 智慧商圈 | 商圈积分同步| points_notify| 是| 是|
| 行业方案 | 智慧商圈 | 商圈积分授权查询| user_authorization| 是| 是|
| 行业方案 | 智慧商圈 | 商圈会员待积分状态查询| business_point_status| 是| 是|
| 行业方案 | 智慧商圈 | 商圈会员停车状态同步| business_parking_sync| 是| 是|
| 行业方案 | 微信支付分停车服务| 查询车牌服务开通信息| parking_service_find| 是| 是|
| 行业方案 | 微信支付分停车服务| 创建停车入场| parking_enter| 是| 是|
| 行业方案 | 微信支付分停车服务| 扣费受理 | parking_order| 是| 是|
| 行业方案 | 微信支付分停车服务| 查询订单 | parking_query| 是| 是|
| 营销工具 | 代金券 | 创建代金券批次| marketing_favor_stock_create | 是| 是|
| 营销工具 | 代金券 | 激活代金券批次| marketing_favor_stock_start| 是| 是|
| 营销工具 | 代金券 | 发放代金券批次| marketing_favor_stock_send| 是| 是|
| 营销工具 | 代金券 | 暂停代金券批次| marketing_favor_stock_pause| 是| 是|
| 营销工具 | 代金券 | 重启代金券批次| marketing_favor_stock_restart| 是| 是|
| 营销工具 | 代金券 | 条件查询批次列表| marketing_favor_stock_list| 是| 是|
| 营销工具 | 代金券 | 查询批次详情| marketing_favor_stock_detail | 是| 是|
| 营销工具 | 代金券 | 查询代金券详情| marketing_favor_coupon_detail| 是| 是|
| 营销工具 | 代金券 | 查询代金券可用商户| marketing_favor_stock_merchant | 是| 是|
| 营销工具 | 代金券 | 查询代金券可用单品| marketing_favor_stock_item| 是| 是|
| 营销工具 | 代金券 | 根据商户号查用户的券| marketing_favor_user_coupon| 是| 是|
| 营销工具 | 代金券 | 下载批次核销明细| marketing_favor_use_flow| 是| 是|
| 营销工具 | 代金券 | 下载批次退款明细| marketing_favor_refund_flow| 是| 是|
| 营销工具 | 代金券 | 设置消息通知地址| marketing_favor_callback_update| 是| 是|
| 营销工具 | 商家券 | 创建商家券 | marketing_busifavor_stock_create | 是| 是|
| 营销工具 | 商家券 | 查询商家券详情| marketing_busifavor_stock_query| 是| 是|
| 营销工具 | 商家券 | 核销用户券 | marketing_busifavor_coupon_use | 是| 是|
| 营销工具 | 商家券 | 根据过滤条件查询用户券 | marketing_busifavor_user_coupon| 是| 是|
| 营销工具 | 商家券 | 查询用户单张券详情| marketing_busifavor_coupon_detail| 是| 是|
| 营销工具 | 商家券 | 上传预存 code | marketing_busifavor_couponcode_upload | 是| 是|
| 营销工具 | 商家券 | 设置商家券事件通知地址 | marketing_busifavor_callback_update| 是| 是|
| 营销工具 | 商家券 | 查询商家券事件通知地址 | marketing_busifavor_callback_query | 是| 是|
| 营销工具 | 商家券 | 关联订单信息| marketing_busifavor_coupon_associate| 是| 是|
| 营销工具 | 商家券 | 取消关联订单信息| marketing_busifavor_coupon_disassociate | 是| 是|
| 营销工具 | 商家券 | 修改批次预算| marketing_busifavor_stock_budget | 是| 是|
| 营销工具 | 商家券 | 修改商家券基本信息| marketing_busifavor_stock_modify | 是| 是|
| 营销工具 | 商家券 | 申请退券 | marketing_busifavor_coupon_return| 是| 是|
| 营销工具 | 商家券 | 使券失效 | marketing_busifavor_coupon_deactivate | 是| 是|
| 营销工具 | 商家券 | 营销补差付款| marketing_busifavor_subsidy_pay| 是| 是|
| 营销工具 | 商家券 | 查询营销补差付款单详情 | marketing_busifavor_subsidy_query| 是| 是|
| 营销工具 | 委托营销 | 建立合作关系| marketing_partnership_build| 是| 是|
| 营销工具 | 委托营销 | 查询合作关系列表| marketing_partnership_query| 是| 是|
| 营销工具 | 消费卡 | 发放消费卡 | marketing_card_send | 是| 否|
| 营销工具 | 支付有礼 | 创建全场满额送活动| marketing_paygift_activity_create| 是| 是|
| 营销工具 | 支付有礼 | 查询活动详情接口| marketing_paygift_activity_detail| 是| 是|
| 营销工具 | 支付有礼 | 查询活动发券商户号| marketing_paygift_merchants_list | 是| 是|
| 营销工具 | 支付有礼 | 查询活动指定商品列表| marketing_paygift_goods_list | 是| 是|
| 营销工具 | 支付有礼 | 终止活动 | marketing_paygift_activity_terminate| 是| 是|
| 营销工具 | 支付有礼 | 新增活动发券商户号| marketing_paygift_merchant_add | 是| 是|
| 营销工具 | 支付有礼 | 获取支付有礼活动列表| marketing_paygift_activity_list| 是| 是|
| 营销工具 | 支付有礼 | 删除活动发券商户号| marketing_paygift_merchant_delete| 是| 是|
| 营销工具 | 银行定向活促 | 出行券切卡组件预下单| industry_coupon_token| 否| 是|
| 营销工具 | 银行定向活促 | 导入定向用户协议号| bank_package_file| 否| 是|
| 营销工具 | 图片上传 | 图片上传(营销专用)| marketing_image_upload| 是| 是|
| 资金应用 | 商家转账到零钱 | 发起商家转账 | transfer_batch | 是| 否|
| 资金应用 | 商家转账到零钱 | 微信批次单号查询批次单| transfer_query_batchid | 是| 否|
| 资金应用 | 商家转账到零钱 | 微信明细单号查询明细单| transfer_query_detail_id | 是| 否|
| 资金应用 | 商家转账到零钱 | 商家批次单号查询批次单| transfer_query_out_batch_no | 是| 否|
| 资金应用 | 商家转账到零钱 | 商家明细单号查询明细单| transfer_query_out_detail_no | 是| 否|
| 资金应用 | 商家转账到零钱 | 转账电子回单申请受理 | transfer_bill_receipt | 是| 否|
| 资金应用 | 商家转账到零钱 | 查询转账电子回单| transfer_query_bill_receipt | 是| 否|
| 资金应用 | 商家转账到零钱 | 转账明细电子回单受理| transfer_detail_receipt | 是| 否|
| 资金应用 | 商家转账到零钱 | 查询转账明细电子回单受理结果| transfer_query_receipt | 是| 否|
| 资金应用 | 分账 | 请求分账 | profitsharing_order | 是| 是|
| 资金应用 | 分账 | 查询分账结果| profitsharing_order_query | 是| 是|
| 资金应用 | 分账 | 请求分账回退| profitsharing_return| 是| 是|
| 资金应用 | 分账 | 查询分账回退结果| profitsharing_return_query| 是| 是|
| 资金应用 | 分账 | 解冻剩余资金| profitsharing_unfreeze| 是| 是|
| 资金应用 | 分账 | 查询剩余待分金额| profitsharing_amount_query| 是| 是|
| 资金应用 | 分账 | 查询最大分账比例| profitsharing_config_query| 否| 是|
| 资金应用 | 分账 | 添加分账接收方| profitsharing_add_receiver| 是| 是|
| 资金应用 | 分账 | 删除分账接收方| profitsharing_delete_receiver| 是| 是|
| 资金应用 | 分账 | 申请分账账单| profitsharing_bill| 是| 是|
| 资金应用 | 分账 | 下载账单 | download_bill| 是| 是|
| 资金应用 | 连锁品牌分账 | 请求分账 | brand_profitsharing_order | 否| 是|
| 资金应用 | 连锁品牌分账 | 查询分账结果| brand_profitsharing_order_query| 否| 是|
| 资金应用 | 连锁品牌分账 | 请求分账回退| brand_profitsharing_return| 否| 是|
| 资金应用 | 连锁品牌分账 | 查询分账回退结果| brand_profitsharing_return_query | 否| 是|
| 资金应用 | 连锁品牌分账 | 完结分账 | brand_profitsharing_unfreeze | 否| 是|
| 资金应用 | 连锁品牌分账 | 查询剩余待分金额| brand_profitsharing_amount_query | 否| 是|
| 资金应用 | 连锁品牌分账 | 查询最大分账比例| brand_profitsharing_config_query | 否| 是|
| 资金应用 | 连锁品牌分账 | 添加分账接收方| brand_profitsharing_add_receiver | 否| 是|
| 资金应用 | 连锁品牌分账 | 删除分账接收方| brand_profitsharing_delete_receiver| 否| 是|
| 资金应用 | 连锁品牌分账 | 申请分账账单| profitsharing_bill| 否| 是|
| 资金应用 | 连锁品牌分账 | 下载账单 | download_bill| 是| 是|
| 风险合规 | 商户开户意愿确认 | 提交申请单 | apply4subject_submit| 否| 是|
| 风险合规 | 商户开户意愿确认 | 撤销申请单 | apply4subject_cancel| 否| 是|
| 风险合规 | 商户开户意愿确认 | 查询申请单审核结果| apply4subject_query | 否| 是|
| 风险合规 | 商户开户意愿确认 | 获取商户开户意愿确认状态 | apply4subject_state | 否| 是|
| 风险合规 | 消费者投诉 2.0 | 查询投诉单列表| complaint_list_query| 是| 是|
| 风险合规 | 消费者投诉 2.0 | 查询投诉单详情| complaint_detail_query| 是| 是|
| 风险合规 | 消费者投诉 2.0 | 查询投诉协商历史| complaint_history_query | 是| 是|
| 风险合规 | 消费者投诉 2.0 | 创建投诉通知回调地址| complaint_notification_create| 是| 是|
| 风险合规 | 消费者投诉 2.0 | 查询投诉通知回调地址| complaint_notification_query | 是| 是|
| 风险合规 | 消费者投诉 2.0 | 更新投诉通知回调地址| complaint_notification_update| 是| 是|
| 风险合规 | 消费者投诉 2.0 | 删除投诉通知回调地址| complaint_notification_delete| 是| 是|
| 风险合规 | 消费者投诉 2.0 | 提交回复 | complaint_response| 是| 是|
| 风险合规 | 消费者投诉 2.0 | 反馈处理完成| complaint_complete| 是| 是|
| 风险合规 | 消费者投诉 2.0 | 更新退款审批结果| complaint_update_refund| 是| 是|
| 风险合规 | 消费者投诉 2.0 | 商户上传反馈图片| complaint_image_upload| 是| 是|
| 风险合规 | 消费者投诉 2.0 | 图片下载 | complaint_image_download| 是| 是|
| 风险合规 | 商户违规通知回调 | 创建商户违规通知回调地址 | merchantrisk_callback_create | 否| 是|
| 风险合规 | 商户违规通知回调 | 查询商户违规通知回调地址 | merchantrisk_callback_query| 否| 是|
| 风险合规 | 商户违规通知回调 | 修改商户违规通知回调地址 | merchantrisk_callback_update | 否| 是|
| 风险合规 | 商户违规通知回调 | 删除商户违规通知回调地址 | merchantrisk_callback_delete | 否| 是|
| 其他能力 | 图片上传 | 图片上传 | image_upload | 是| 是|
| 其他能力 | 视频上传 | 视频上传 | video_upload | 是| 是|
| 其他 | 电子发票(公共API) | 创建电子发票卡券模板 | fapiao_card_template | 是 | 是 |
| 其他 | 电子发票(公共API) | 配置开发选项 | fapiao_set_merchant_config | 是 | 是 |
| 其他 | 电子发票(公共API) | 查询商户配置的开发选项 | fapiao_merchant_config | 是 | 是 |
| 其他 | 电子发票(公共API) | 获取抬头填写链接 | fapiao_title_url | 是 | 是 |
| 其他 | 电子发票(公共API) | 获取用户填写的抬头 | fapiao_title | 是 | 是 |
| 其他 | 电子发票(区块链模式) | 获取商品和服务税收分类对照表 | fapiao_tax_codes | 是 | 是 |
| 其他 | 电子发票(区块链模式) | 获取商户开票基础信息 | fapiao_merchant_base_info | 是 | 是 |
| 其他 | 电子发票(区块链模式) | 开具电子发票 | fapiao_applications | 是 | 是 |
| 其他 | 电子发票(区块链模式) | 查询电子发票 | fapiao_query | 是 | 是 |
| 其他 | 电子发票(区块链模式) | 冲红电子发票 | fapiao_reverse | 是 | 是 |
| 其他 | 电子发票(自建平台模式) | 上传电子发票文件 | fapiao_upload_file | 是 | 是 |
| 其他 | 电子发票(自建平台模式) | 将电子发票插入微信用户卡包 | fapiao_insert_cards | 是 | 是 |
| 其他 | 银行组件 | 获取对私银行卡号开户银行 | capital_search_bank_number | 是 | 是 |
| 其他 | 银行组件 | 查询支持个人业务的银行列表 | capital_personal_banks | 是 | 是 |
| 其他 | 银行组件 | 查询支持对公业务的银行列表 | capital_corporate_banks | 是 | 是 |
| 其他 | 银行组件 | 查询省份列表 | capital_provinces | 是 | 是 |
| 其他 | 银行组件 | 查询城市列表 | capital_cities | 是 | 是 |
| 其他 | 银行组件 | 查询支行列表 | capital_branches | 是 | 是 |
### 接口函数参数
参数类型对照参考下表:
| 微信支付官方文档声明 | **wechatpayv3 python sdk** |
| -------------------- | -------------------------- |
| string | str |
| int| int |
| object | dict: {} |
| array| list: [] |
| boolean| bool: True, False |
| message| bytes|
### 接口函数返回值
每个接口均同步返回 code 和 message,code 为 web 请求得到的 HTTP 状态码,message 为服务器返回的 json 字符串。
例外:
1. 回调通知(callback)接口将收到的参数解密后返回,回调验证不合规或解密失败则返回 None;
2. 下载账单(download_bill)和消费者投诉 2.0 的图片下载(complaint_image_download)接口返回的 message 为 bytes 类型,直接将 message 写入磁盘即可获得对应的目标文件。
## 常见问题
### 回调验证失败处理
开发者遇到的难点之一就是回调验证失败的问题,由于众多的 python web 框架对回调消息的处理不完全一致,如果出现回调验证失败,请务必确认传入的 headers 和 body 的值和类型。
通常框架传过来的 headers 类型是 dict,而 body 类型是 bytes。flask 框架参考以下方法可直接获取到解密后的实际内容。
```python
@app.route('/notify', methods=['POST'])
def notify():
result = wxpay.callback(request.headers, request.data)
if result and result.get('event_type') == 'TRANSACTION.SUCCESS':
resource = result.get('resource')
appid = resource.get('appid')
mchid = resource.get('mchid')
out_trade_no = resource.get('out_trade_no')
transaction_id = resource.get('transaction_id')
trade_type = resource.get('trade_type')
trade_state = resource.get('trade_state')
trade_state_desc = resource.get('trade_state_desc')
bank_type = resource.get('bank_type')
attach = resource.get('attach')
success_time = resource.get('success_time')
payer = resource.get('payer')
amount = resource.get('amount').get('total')
# TODO: 根据返回参数进行必要的业务处理,处理完后返回200或204
return jsonify({'code': 'SUCCESS', 'message': '成功'})
else:
return jsonify({'code': 'FAILED', 'message': '失败'}), 500
```
#### flask 框架
如上面示例,直接传入 request.headers 和 request.data 即可。
```python
result = wxpay.callback(headers=request.headers, body=request.data)
```
#### django 框架
由于 django 框架特殊性,会将 headers 做一定的预处理,可以参考以下方式调用。
```python
headers = {}
headers.update({'Wechatpay-Signature': request.META.get('HTTP_WECHATPAY_SIGNATURE')})
headers.update({'Wechatpay-Timestamp': request.META.get('HTTP_WECHATPAY_TIMESTAMP')})
headers.update({'Wechatpay-Nonce': request.META.get('HTTP_WECHATPAY_NONCE')})
headers.update({'Wechatpay-Serial': request.META.get('HTTP_WECHATPAY_SERIAL')})
result = wxpay.callback(headers=headers, body=request.body)
```
#### tornado 框架
直接传入 request.headers 和 request.body 即可。
```python
result = wxpay.callback(headers=request.headers, body=request.body)
```
#### 其他框架
参考以上处理方法,大原则就是保证传给 callback 的参数值和收到的值一致,不要转换为 dict,也不要转换为 string。
### 反复收到同一个回调消息怎么处理
实际开发中处理微信支付通知消息时有两个问题需要注意。一是可能会重复收到同一个通知消息,需要在代码中进行判断处理。另一个是处理消息的时间如果过长,建议考虑异步处理,先缓存消息,避免微信支付服务器端认为超时,如果持续超时,微信支付服务器端可能会认为回调消息接口不可用。
### 接口清单里怎么没有回调接口
所有的回调接口都通过公用接口 callback 处理,因此清单里没有一一罗列。对于收到的回调消息,可以通过 event_type 参数判断消息类型进行下一步处理,具体参数清单参考微信支付官方文档。
### 服务商模式如何接入
SDK 默认为直连商户接入,如果初始化时候指定 partner_mode=True,即切换为服务商模式。需要注意的是,一部分接口为直连商户专有,一部分接口为服务商模式专有,另有部分接口同时兼容直连商户和服务商,这些同时兼容的接口在两种模式下个别参数要求会稍有不同。
### 如何下载平台证书?
SDK 内部已经实现了自动下载和加载平台证书,无需预先下载。如需了解具体实现逻辑,可以参阅[core.py](wechatpayv3/core.py)中的\_update_certificates 函数。
### 接口始终返回 500 错误
通常为初始化参数配置错误,如果反复检查无果,建议进入微信支付后台重置所有参数后再试。
### 回调接口始终校验失败
查阅 web 框架文档,确保传入 callback 的 body 参数没有经过任何转义,通常为 bytes 类型。
### 下载平台证书时解析失败
检查 APIV3_KEY 是否和微信支付后台设置的一致,如无法确认,建议重置后再试。
## 签名、验签、加密、解密的内部实现
一般应用开发者可以不用向下看了,有心了解这几项内部实现的可以参考[这里](security.md)了解。
Raw data
{
"_id": null,
"home_page": "https://github.com/houxiaohou/wechatpayv3",
"name": "wechatpayv3-fix",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "python sdk wechatpay api v3 \u5fae\u4fe1\u652f\u4ed8",
"author": "houxiaohou",
"author_email": "",
"download_url": "https://files.pythonhosted.org/packages/e6/d5/9d365239a0d4be29fd79b8296d5a69262acf1d0967884a6a879ca949146e/wechatpayv3-fix-1.2.38.tar.gz",
"platform": null,
"description": "# \u3010\u4fee\u590d\u7248 v1.2.36\u3011\u5fae\u4fe1\u652f\u4ed8 API v3 Python SDK\n\n\n## \u4ecb\u7ecd\n\n\u5fae\u4fe1\u652f\u4ed8\u63a5\u53e3 V3 \u7248 python \u5e93\u3002\n\n## \u9002\u7528\u5bf9\u8c61\n\n**wechatpayv3**\u540c\u65f6\u652f\u6301\u5fae\u4fe1\u652f\u4ed8[\u76f4\u8fde\u6a21\u5f0f](https://pay.weixin.qq.com/wiki/doc/apiv3/index.shtml)\u53ca[\u670d\u52a1\u5546\u6a21\u5f0f](https://pay.weixin.qq.com/wiki/doc/apiv3_partner/index.shtml)\uff0c\u63a5\u53e3\u8bf4\u660e\u8be6\u89c1\u5b98\u7f51\u3002\n\n## \u7279\u6027\n\n1. \u5e73\u53f0\u8bc1\u4e66\u81ea\u52a8\u66f4\u65b0\uff0c\u65e0\u9700\u5f00\u53d1\u8005\u5173\u6ce8\u5e73\u53f0\u8bc1\u4e66\u6709\u6548\u6027\uff0c\u65e0\u9700\u624b\u52a8\u4e0b\u8f7d\u66f4\u65b0\uff1b\n2. \u652f\u6301\u672c\u5730\u7f13\u5b58\u5e73\u53f0\u8bc1\u4e66\uff0c\u521d\u59cb\u5316\u65f6\u6307\u5b9a\u5e73\u53f0\u8bc1\u4e66\u4fdd\u5b58\u76ee\u5f55\u5373\u53ef\uff1b\n3. \u654f\u611f\u4fe1\u606f\u76f4\u63a5\u4f20\u5165\u660e\u6587\u53c2\u6570\uff0cSDK \u5185\u90e8\u81ea\u52a8\u52a0\u5bc6\uff0c\u65e0\u9700\u624b\u52a8\u5904\u7406\uff1b\n4. \u56de\u8c03\u901a\u77e5\u81ea\u52a8\u9a8c\u8bc1\u56de\u8c03\u6d88\u606f\uff0c\u81ea\u52a8\u89e3\u5bc6 resource \u5bf9\u8c61\uff0c\u5e76\u8fd4\u56de\u89e3\u5bc6\u540e\u7684\u6570\u636e\uff1b\n5. \u5df2\u9002\u914d[\u76f4\u8fde\u6a21\u5f0f](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/index.shtml)\u548c[\u670d\u52a1\u5546\u6a21\u5f0f](https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/index.shtml)\u4e2d\u9664\u201c\u7535\u5546\u6536\u4ed8\u901a\u201d\u4ee5\u5916\u6240\u6709 v3 \u7248\u63a5\u53e3\u3002\n\n\n## \u5b89\u88c5\n\n```\n$ pip install wechatpayv3-fix\n```\n\n## \u4f7f\u7528\u65b9\u6cd5\n\n### \u51c6\u5907\n\n\u53c2\u8003\u5fae\u4fe1\u5b98\u65b9\u6587\u6863\u51c6\u5907\u597d\u5bc6\u94a5, \u8bc1\u4e66\u6587\u4ef6\u548c\u914d\u7f6e([\u8bc1\u4e66/\u5bc6\u94a5/\u7b7e\u540d\u4ecb\u7ecd](https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay3_0.shtml))\n\n- **\u5546\u6237 API \u8bc1\u4e66\u79c1\u94a5\uff1aPRIVATE_KEY**\u3002\u5546\u6237\u7533\u8bf7\u5546\u6237 API \u8bc1\u4e66\u65f6\uff0c\u4f1a\u751f\u6210\u5546\u6237\u79c1\u94a5\uff0c\u5e76\u4fdd\u5b58\u5728\u672c\u5730\u8bc1\u4e66\u6587\u4ef6\u5939\u7684\u6587\u4ef6 apiclient_key.pem \u4e2d\u3002\n > :warning: \u4e0d\u8981\u628a\u79c1\u94a5\u6587\u4ef6\u66b4\u9732\u5728\u516c\u5171\u573a\u5408\uff0c\u5982\u4e0a\u4f20\u5230 Github\uff0c\u5199\u5728\u5ba2\u6237\u7aef\u4ee3\u7801\u7b49\u3002\n- **\u5546\u6237 API \u8bc1\u4e66\u5e8f\u5217\u53f7\uff1aCERT_SERIAL_NO**\u3002\u6bcf\u4e2a\u8bc1\u4e66\u90fd\u6709\u4e00\u4e2a\u7531 CA \u9881\u53d1\u7684\u552f\u4e00\u7f16\u53f7\uff0c\u5373\u8bc1\u4e66\u5e8f\u5217\u53f7\u3002\u6269\u5c55\u9605\u8bfb [\u5982\u4f55\u67e5\u770b\u8bc1\u4e66\u5e8f\u5217\u53f7](https://wechatpay-api.gitbook.io/wechatpay-api-v3/chang-jian-wen-ti/zheng-shu-xiang-guan#ru-he-cha-kan-zheng-shu-xu-lie-hao)\u3002\n- **\u5fae\u4fe1\u652f\u4ed8 APIv3 \u5bc6\u94a5\uff1aAPIV3_KEY**\uff0c\u662f\u5728\u56de\u8c03\u901a\u77e5\u548c\u5fae\u4fe1\u652f\u4ed8\u5e73\u53f0\u8bc1\u4e66\u4e0b\u8f7d\u63a5\u53e3\u4e2d\uff0c\u4e3a\u52a0\u5f3a\u6570\u636e\u5b89\u5168\uff0c\u5bf9\u5173\u952e\u4fe1\u606f `AES-256-GCM` \u52a0\u5bc6\u65f6\u4f7f\u7528\u7684\u5bf9\u79f0\u52a0\u5bc6\u5bc6\u94a5\u3002\n\n### \u4e00\u4e2a\u6700\u5c0f\u7684\u540e\u7aef\n\n[examples.py](examples.py) \u6f14\u793a\u4e86\u4e00\u4e2a\u5e26\u6709[Native \u652f\u4ed8\u4e0b\u5355](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_1.shtml)\u63a5\u53e3\u548c[\u652f\u4ed8\u901a\u77e5](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_5.shtml)\u63a5\u53e3\u7684\u540e\u7aef\u3002\n\u9996\u5148\uff0c\u4fee\u6539 **examplys.py** \u91cc\u4ee5\u4e0b\u51e0\u9879\u914d\u7f6e\u53c2\u6570\uff1a\n\n```python\n# \u5fae\u4fe1\u652f\u4ed8\u5546\u6237\u53f7\uff0c\u670d\u52a1\u5546\u6a21\u5f0f\u4e0b\u4e3a\u670d\u52a1\u5546\u6237\u53f7\uff0c\u5373\u5b98\u65b9\u6587\u6863\u4e2d\u7684sp_mchid\u3002\nMCHID = '1230000109'\n\n# \u5546\u6237\u8bc1\u4e66\u79c1\u94a5\uff0c\u6b64\u6587\u4ef6\u4e0d\u8981\u653e\u7f6e\u5728\u4e0b\u9762\u8bbe\u7f6e\u7684CERT_DIR\u76ee\u5f55\u91cc\u3002\nwith open('path_to_key/apiclient_key.pem') as f:\n PRIVATE_KEY = f.read()\n\n# \u5546\u6237\u8bc1\u4e66\u5e8f\u5217\u53f7\nCERT_SERIAL_NO = '444F4864EA9B34415...'\n\n# API v3\u5bc6\u94a5\uff0c https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay3_2.shtml\nAPIV3_KEY = 'MIIEvwIBADANBgkqhkiG9w0BAQE...'\n\n# APPID\uff0c\u5e94\u7528ID\uff0c\u670d\u52a1\u5546\u6a21\u5f0f\u4e0b\u4e3a\u670d\u52a1\u5546\u5e94\u7528ID\uff0c\u5373\u5b98\u65b9\u6587\u6863\u4e2d\u7684sp_appid\uff0c\u4e5f\u53ef\u4ee5\u5728\u8c03\u7528\u63a5\u53e3\u7684\u65f6\u5019\u8986\u76d6\u3002\nAPPID = 'wxd678efh567hg6787'\n\n# \u56de\u8c03\u5730\u5740\uff0c\u4e5f\u53ef\u4ee5\u5728\u8c03\u7528\u63a5\u53e3\u7684\u65f6\u5019\u8986\u76d6\u3002\nNOTIFY_URL = 'https://www.xxxx.com/notify'\n\n# \u5fae\u4fe1\u652f\u4ed8\u5e73\u53f0\u8bc1\u4e66\u7f13\u5b58\u76ee\u5f55\uff0c\u521d\u59cb\u8c03\u8bd5\u7684\u65f6\u5019\u53ef\u4ee5\u8bbe\u4e3aNone\uff0c\u9996\u6b21\u4f7f\u7528\u786e\u4fdd\u6b64\u76ee\u5f55\u4e3a\u7a7a\u76ee\u5f55\u3002\nCERT_DIR = './cert'\n\n# \u65e5\u5fd7\u8bb0\u5f55\u5668\uff0c\u8bb0\u5f55web\u8bf7\u6c42\u548c\u56de\u8c03\u7ec6\u8282\uff0c\u4fbf\u4e8e\u8c03\u8bd5\u6392\u9519\u3002\nlogging.basicConfig(filename=os.path.join(os.getcwd(), 'demo.log'), level=logging.DEBUG, filemode='a', format='%(asctime)s - %(process)s - %(levelname)s: %(message)s')\nLOGGER = logging.getLogger(\"demo\")\n\n# \u63a5\u5165\u6a21\u5f0f\uff1aFalse=\u76f4\u8fde\u5546\u6237\u6a21\u5f0f\uff0cTrue=\u670d\u52a1\u5546\u6a21\u5f0f\u3002\nPARTNER_MODE = False\n\n# \u4ee3\u7406\u8bbe\u7f6e\uff0cNone\u6216\u8005{\"https\": \"http://10.10.1.10:1080\"}\uff0c\u8be6\u7ec6\u683c\u5f0f\u53c2\u89c1https://docs.python-requests.org/zh_CN/latest/user/advanced.html\nPROXY = None\n```\n\n\u63a5\u4e0b\u6765\u521d\u59cb\u5316 WechatPay \u5b9e\u4f8b\u5e76\u914d\u7f6e\u4e00\u4e2a\u5408\u9002\u7684\u63a5\u53e3\uff1a\n\n```python\nwxpay = WeChatPay(\n wechatpay_type=WeChatPayType.NATIVE,\n mchid=MCHID,\n private_key=PRIVATE_KEY,\n cert_serial_no=CERT_SERIAL_NO,\n apiv3_key=APIV3_KEY,\n appid=APPID,\n notify_url=NOTIFY_URL,\n cert_dir=CERT_DIR,\n logger=LOGGER,\n partner_mode=PARTNER_MODE,\n proxy=PROXY)\n\napp = Flask(__name__)\n\n@app.route('/pay')\ndef pay():\n # \u4ee5native\u4e0b\u5355\u4e3a\u4f8b\uff0c\u4e0b\u5355\u6210\u529f\u540e\u5373\u53ef\u83b7\u53d6\u5230'code_url'\uff0c\u5c06'code_url'\u8f6c\u6362\u4e3a\u4e8c\u7ef4\u7801\uff0c\u5e76\u7528\u5fae\u4fe1\u626b\u7801\u5373\u53ef\u8fdb\u884c\u652f\u4ed8\u6d4b\u8bd5\u3002\n out_trade_no = ''.join(sample(ascii_letters + digits, 8))\n description = 'demo-description'\n amount = 1\n code, message = wxpay.pay(\n description=description,\n out_trade_no=out_trade_no,\n amount={'total': amount},\n pay_type=WeChatPayType.NATIVE\n )\n return jsonify({'code': code, 'message': message})\n```\n\n\u68c0\u67e5\u4e00\u4e0b\u53c2\u6570\u65e0\u8bef\uff0c\u73b0\u5728\u5c31\u53ef\u4ee5\u7528 python \u89e3\u91ca\u5668\u6765\u8fd0\u884c\uff1a\n\n```shell\n$ python examples.py\n * Serving Flask app \"examples\" (lazy loading)\n * Environment: production\n WARNING: This is a development server. Do not use it in a production deployment.\n Use a production WSGI server instead.\n * Debug mode: off\n * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)\n```\n\n\u73b0\u5728\u8bbf\u95ee http://127.0.0.1:5000/pay \uff0c\u5982\u679c\u4e00\u5207\u6b63\u5e38\uff0c\u4f60\u4f1a\u770b\u5230\u4e0b\u9762\u4e00\u4e32 json \u5b57\u7b26\u4e32\uff1a\n\n```python\n{\n \"code\": 200,\n \"message\": \"{\\\"code_url\\\":\\\"weixin://wxpay/bizpayurl?pr=abcdefghi\\\"}\"\n}\n```\n\n\u5230\u8fd9\u4e00\u6b65\u7edf\u4e00\u4e0b\u5355\u7684\u540e\u7aef\u5c31\u5b8c\u6210\u4e86\uff0c\u73b0\u5728\u5c06 code_url \u7684\u503c\u5373\"weixin://wxpay/bizpayurl?pr=abcdefghi\"\u7528[\u8349\u6599](https://cli.im/)\u8f6c\u6362\u4e3a\u4e8c\u7ef4\u7801\u5373\u53ef\u7528\u5fae\u4fe1\u626b\u7801\u8fdb\u884c\u652f\u4ed8\u6d4b\u8bd5\u3002\n\n**\u4ee5\u4e0a\u6b65\u9aa4\u5982\u679c\u4e0d\u80fd\u6b63\u786e\u6267\u884c\uff0c\u52a1\u5fc5\u4ed4\u7ec6\u68c0\u67e5\u5404\u9879\u521d\u59cb\u5316\u53c2\u6570\uff0c\u5fc5\u8981\u7684\u60c5\u51b5\u4e0b\uff0c\u767b\u5f55\u5fae\u4fe1\u652f\u4ed8\u540e\u53f0\uff0c\u5c06\u6240\u6709\u53c2\u6570\u91cd\u7f6e\u3002**\n\nNative \u652f\u4ed8\u8c03\u8bd5\u6700\u7b80\u5355\u4fbf\u6377\uff0c\u8c03\u8bd5\u901a\u8fc7\u6ca1\u6709\u95ee\u9898\u8bc1\u660e\u521d\u59cb\u5316\u53c2\u6570\u6b63\u786e\u4e4b\u540e\uff0c\u5982\u679c\u9700\u8981\u91c7\u7528\u5176\u4ed6\uff08\u5c0f\u7a0b\u5e8f\u3001H5\u3001JSAPI\u3001APP\uff09\u652f\u4ed8\u4e0b\u5355\uff0c\u53ef\u7ee7\u7eed\u53c2\u8003 examples.py\u3002\n\n## \u63a5\u53e3\u6e05\u5355\n\n\u5df2\u9002\u914d\u7684\u5fae\u4fe1\u652f\u4ed8 V3 \u7248 API \u63a5\u53e3\u5217\u8868\u5982\u4e0b\uff0c\u90e8\u5206\u63a5\u53e3\u8c03\u7528\u793a\u4f8b\u53ef\u4ee5\u53c2\u8003[\u8fd9\u91cc](interface.md)\uff1a\n\n| \u5927\u7c7b| \u5c0f\u7c7b | \u63a5\u53e3 | \u63a5\u53e3\u51fd\u6570| \u76f4\u8fde\u5546\u6237\u9002\u7528 | \u670d\u52a1\u5546\u9002\u7528 |\n| ---- | ---------------------------------------- | ------------------------ | --------------------------------------- | ------------ | ---------- |\n| \u516c\u7528| \u516c\u7528 | \u8c03\u8d77\u652f\u4ed8\u7b7e\u540d| sign | \u662f | \u662f |\n| \u516c\u7528| \u516c\u7528 | \u56de\u8c03\u901a\u77e5| callback | \u662f | \u662f |\n| \u516c\u7528| \u516c\u7528 | \u654f\u611f\u4fe1\u606f\u53c2\u6570\u89e3\u5bc6 | decrypt | \u662f | \u662f |\n| \u516c\u7528| \u516c\u7528 | \u4e0b\u8f7d\u8d26\u5355| download_bill| \u662f | \u662f |\n| \u5546\u6237\u8fdb\u4ef6 | \u7279\u7ea6\u5546\u6237\u8fdb\u4ef6\u3001\u5c0f\u5fae\u5546\u6237\u8fdb\u4ef6| \u63d0\u4ea4\u7533\u8bf7\u5355 | applyment_submit | \u5426| \u662f|\n| \u5546\u6237\u8fdb\u4ef6 | \u7279\u7ea6\u5546\u6237\u8fdb\u4ef6\u3001\u5c0f\u5fae\u5546\u6237\u8fdb\u4ef6| \u67e5\u8be2\u7533\u8bf7\u5355\u72b6\u6001| applyment_query| \u5426| \u662f|\n| \u5546\u6237\u8fdb\u4ef6 | \u7279\u7ea6\u5546\u6237\u8fdb\u4ef6\u3001\u5c0f\u5fae\u5546\u6237\u8fdb\u4ef6| \u4fee\u6539\u7ed3\u7b97\u8d26\u53f7| applyment_settlement_modify| \u5426| \u662f|\n| \u5546\u6237\u8fdb\u4ef6 | \u7279\u7ea6\u5546\u6237\u8fdb\u4ef6\u3001\u5c0f\u5fae\u5546\u6237\u8fdb\u4ef6| \u67e5\u8be2\u7ed3\u7b97\u8d26\u53f7| applyment_settlement_query| \u5426| \u662f|\n| \u57fa\u7840\u652f\u4ed8 | JSAPI\u3001APP\u3001H5\u3001Native\u3001\u5c0f\u7a0b\u5e8f\u652f\u4ed8| \u7edf\u4e00\u4e0b\u5355 | pay | \u662f| \u662f|\n| \u57fa\u7840\u652f\u4ed8 | JSAPI\u3001APP\u3001H5\u3001Native\u3001\u5c0f\u7a0b\u5e8f\u652f\u4ed8| \u67e5\u8be2\u8ba2\u5355 | query | \u662f| \u662f|\n| \u57fa\u7840\u652f\u4ed8 | JSAPI\u3001APP\u3001H5\u3001Native\u3001\u5c0f\u7a0b\u5e8f\u652f\u4ed8| \u5173\u95ed\u8ba2\u5355 | close | \u662f| \u662f|\n| \u57fa\u7840\u652f\u4ed8 | \u5408\u5355\u652f\u4ed8 | \u7edf\u4e00\u4e0b\u5355 | combine_pay| \u662f| \u662f|\n| \u57fa\u7840\u652f\u4ed8 | \u5408\u5355\u652f\u4ed8 | \u67e5\u8be2\u8ba2\u5355 | combine_query| \u662f| \u662f|\n| \u57fa\u7840\u652f\u4ed8 | \u5408\u5355\u652f\u4ed8 | \u5173\u95ed\u8ba2\u5355 | combine_close| \u662f| \u662f|\n| \u57fa\u7840\u652f\u4ed8 | JSAPI\u3001APP\u3001H5\u3001Native\u3001\u5c0f\u7a0b\u5e8f\u3001\u5408\u5355\u652f\u4ed8 | \u7533\u8bf7\u9000\u6b3e | refund| \u662f| \u662f|\n| \u57fa\u7840\u652f\u4ed8 | JSAPI\u3001APP\u3001H5\u3001Native\u3001\u5c0f\u7a0b\u5e8f\u3001\u5408\u5355\u652f\u4ed8 | \u67e5\u8be2\u5355\u7b14\u9000\u6b3e| query_refund | \u662f| \u662f|\n| \u57fa\u7840\u652f\u4ed8 | JSAPI\u3001APP\u3001H5\u3001Native\u3001\u5c0f\u7a0b\u5e8f\u3001\u5408\u5355\u652f\u4ed8 | \u7533\u8bf7\u4ea4\u6613\u8d26\u5355| trade_bill | \u662f| \u662f|\n| \u57fa\u7840\u652f\u4ed8 | JSAPI\u3001APP\u3001H5\u3001Native\u3001\u5c0f\u7a0b\u5e8f\u3001\u5408\u5355\u652f\u4ed8 | \u7533\u8bf7\u8d44\u91d1\u8d26\u5355| fundflow_bill| \u662f| \u662f|\n| \u57fa\u7840\u652f\u4ed8 | JSAPI\u3001APP\u3001H5\u3001Native\u3001\u5c0f\u7a0b\u5e8f\u3001\u5408\u5355\u652f\u4ed8 | \u7533\u8bf7\u5355\u4e2a\u5b50\u5546\u6237\u8d44\u91d1\u8d26\u5355 | submch_fundflow_bill| \u5426| \u662f|\n| \u57fa\u7840\u652f\u4ed8 | JSAPI\u3001APP\u3001H5\u3001Native\u3001\u5c0f\u7a0b\u5e8f\u3001\u5408\u5355\u652f\u4ed8 | \u4e0b\u8f7d\u8d26\u5355 | download_bill| \u662f| \u662f|\n| \u7ecf\u8425\u80fd\u529b | \u5fae\u4fe1\u652f\u4ed8\u5206\uff08\u514d\u786e\u8ba4\u6a21\u5f0f\uff09 | \u521b\u5355\u7ed3\u5355\u5408\u5e76| payscore_direct_complete| \u662f| \u5426|\n| \u7ecf\u8425\u80fd\u529b | \u5fae\u4fe1\u652f\u4ed8\u5206\uff08\u514d\u786e\u8ba4\u9884\u6388\u6743\u6a21\u5f0f\uff09| \u5546\u6237\u9884\u6388\u6743 | payscore_permission | \u662f| \u5426|\n| \u7ecf\u8425\u80fd\u529b | \u5fae\u4fe1\u652f\u4ed8\u5206\uff08\u514d\u786e\u8ba4\u9884\u6388\u6743\u6a21\u5f0f\uff09| \u67e5\u8be2\u7528\u6237\u6388\u6743\u8bb0\u5f55| payscore_permission_query | \u662f| \u5426|\n| \u7ecf\u8425\u80fd\u529b | \u5fae\u4fe1\u652f\u4ed8\u5206\uff08\u514d\u786e\u8ba4\u9884\u6388\u6743\u6a21\u5f0f\uff09| \u89e3\u9664\u7528\u6237\u6388\u6743\u5173\u7cfb| payscore_permission_terminate| \u662f| \u5426|\n| \u7ecf\u8425\u80fd\u529b | \u5fae\u4fe1\u652f\u4ed8\u5206\uff08\u516c\u5171 API\uff09 | \u521b\u5efa\u652f\u4ed8\u5206\u8ba2\u5355| payscore_create| \u662f| \u5426|\n| \u7ecf\u8425\u80fd\u529b | \u5fae\u4fe1\u652f\u4ed8\u5206\uff08\u516c\u5171 API\uff09 | \u67e5\u8be2\u652f\u4ed8\u5206\u8ba2\u5355| payscore_query | \u662f| \u5426|\n| \u7ecf\u8425\u80fd\u529b | \u5fae\u4fe1\u652f\u4ed8\u5206\uff08\u516c\u5171 API\uff09 | \u53d6\u6d88\u652f\u4ed8\u5206\u8ba2\u5355| payscore_cancel| \u662f| \u5426|\n| \u7ecf\u8425\u80fd\u529b | \u5fae\u4fe1\u652f\u4ed8\u5206\uff08\u516c\u5171 API\uff09 | \u4fee\u6539\u8ba2\u5355\u91d1\u989d| payscore_modify| \u662f| \u5426|\n| \u7ecf\u8425\u80fd\u529b | \u5fae\u4fe1\u652f\u4ed8\u5206\uff08\u516c\u5171 API\uff09 | \u5b8c\u7ed3\u652f\u4ed8\u5206\u8ba2\u5355| payscore_complete| \u662f| \u5426|\n| \u7ecf\u8425\u80fd\u529b | \u5fae\u4fe1\u652f\u4ed8\u5206\uff08\u516c\u5171 API\uff09 | \u5546\u6237\u53d1\u8d77\u50ac\u6536\u6263\u6b3e| payscore_pay | \u662f| \u5426|\n| \u7ecf\u8425\u80fd\u529b | \u5fae\u4fe1\u652f\u4ed8\u5206\uff08\u516c\u5171 API\uff09 | \u540c\u6b65\u670d\u52a1\u8ba2\u5355\u4fe1\u606f| payscore_sync| \u662f| \u5426|\n| \u7ecf\u8425\u80fd\u529b | \u5fae\u4fe1\u652f\u4ed8\u5206\uff08\u516c\u5171 API\uff09 | \u7533\u8bf7\u9000\u6b3e | payscore_refund| \u662f| \u5426|\n| \u7ecf\u8425\u80fd\u529b | \u5fae\u4fe1\u652f\u4ed8\u5206\uff08\u516c\u5171 API\uff09 | \u67e5\u8be2\u5355\u7b14\u9000\u6b3e| payscore_refund_query | \u662f| \u5426|\n| \u7ecf\u8425\u80fd\u529b | \u5fae\u4fe1\u652f\u4ed8\u5206\uff08\u516c\u5171 API\uff09 | \u5546\u6237\u7533\u8bf7\u83b7\u53d6\u5bf9\u8d26\u5355| payscore_merchant_bill| \u662f| \u5426|\n| \u7ecf\u8425\u80fd\u529b | \u652f\u4ed8\u5373\u670d\u52a1| \u670d\u52a1\u4eba\u5458\u6ce8\u518c| guides_register| \u662f| \u662f|\n| \u7ecf\u8425\u80fd\u529b | \u652f\u4ed8\u5373\u670d\u52a1| \u670d\u52a1\u4eba\u5458\u5206\u914d| guides_assign| \u662f| \u662f|\n| \u7ecf\u8425\u80fd\u529b | \u652f\u4ed8\u5373\u670d\u52a1| \u670d\u52a1\u4eba\u5458\u67e5\u8be2| guides_query | \u662f| \u662f|\n| \u7ecf\u8425\u80fd\u529b | \u652f\u4ed8\u5373\u670d\u52a1| \u670d\u52a1\u4eba\u5458\u4fe1\u606f\u66f4\u65b0| guides_update| \u662f| \u662f|\n| \u7ecf\u8425\u80fd\u529b | \u70b9\u91d1\u8ba1\u5212 | \u70b9\u91d1\u8ba1\u5212\u7ba1\u7406| goldplan_plan_change| \u5426| \u662f|\n| \u7ecf\u8425\u80fd\u529b | \u70b9\u91d1\u8ba1\u5212 | \u5546\u5bb6\u5c0f\u7968\u7ba1\u7406| goldplan_custompage_change| \u5426| \u662f|\n| \u7ecf\u8425\u80fd\u529b | \u70b9\u91d1\u8ba1\u5212 | \u540c\u4e1a\u8fc7\u6ee4\u6807\u7b7e\u7ba1\u7406| goldplan_advertising_filter| \u5426| \u662f|\n| \u7ecf\u8425\u80fd\u529b | \u70b9\u91d1\u8ba1\u5212 | \u5f00\u901a\u5e7f\u544a\u5c55\u793a| goldplan_advertising_open | \u5426| \u662f|\n| \u7ecf\u8425\u80fd\u529b | \u70b9\u91d1\u8ba1\u5212 | \u5173\u95ed\u5e7f\u544a\u5c55\u793a| goldplan_advertising_close| \u5426| \u662f|\n| \u884c\u4e1a\u65b9\u6848 | \u7535\u5546\u6536\u4ed8\u901a| \u5c1a\u672a\u9002\u914d | \u5c1a\u672a\u9002\u914d| \u5426| \u662f|\n| \u884c\u4e1a\u65b9\u6848 | \u667a\u6167\u5546\u5708 | \u5546\u5708\u79ef\u5206\u540c\u6b65| points_notify| \u662f| \u662f|\n| \u884c\u4e1a\u65b9\u6848 | \u667a\u6167\u5546\u5708 | \u5546\u5708\u79ef\u5206\u6388\u6743\u67e5\u8be2| user_authorization| \u662f| \u662f|\n| \u884c\u4e1a\u65b9\u6848 | \u667a\u6167\u5546\u5708 | \u5546\u5708\u4f1a\u5458\u5f85\u79ef\u5206\u72b6\u6001\u67e5\u8be2| business_point_status| \u662f| \u662f|\n| \u884c\u4e1a\u65b9\u6848 | \u667a\u6167\u5546\u5708 | \u5546\u5708\u4f1a\u5458\u505c\u8f66\u72b6\u6001\u540c\u6b65| business_parking_sync| \u662f| \u662f|\n| \u884c\u4e1a\u65b9\u6848 | \u5fae\u4fe1\u652f\u4ed8\u5206\u505c\u8f66\u670d\u52a1| \u67e5\u8be2\u8f66\u724c\u670d\u52a1\u5f00\u901a\u4fe1\u606f| parking_service_find| \u662f| \u662f|\n| \u884c\u4e1a\u65b9\u6848 | \u5fae\u4fe1\u652f\u4ed8\u5206\u505c\u8f66\u670d\u52a1| \u521b\u5efa\u505c\u8f66\u5165\u573a| parking_enter| \u662f| \u662f|\n| \u884c\u4e1a\u65b9\u6848 | \u5fae\u4fe1\u652f\u4ed8\u5206\u505c\u8f66\u670d\u52a1| \u6263\u8d39\u53d7\u7406 | parking_order| \u662f| \u662f|\n| \u884c\u4e1a\u65b9\u6848 | \u5fae\u4fe1\u652f\u4ed8\u5206\u505c\u8f66\u670d\u52a1| \u67e5\u8be2\u8ba2\u5355 | parking_query| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u4ee3\u91d1\u5238 | \u521b\u5efa\u4ee3\u91d1\u5238\u6279\u6b21| marketing_favor_stock_create | \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u4ee3\u91d1\u5238 | \u6fc0\u6d3b\u4ee3\u91d1\u5238\u6279\u6b21| marketing_favor_stock_start| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u4ee3\u91d1\u5238 | \u53d1\u653e\u4ee3\u91d1\u5238\u6279\u6b21| marketing_favor_stock_send| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u4ee3\u91d1\u5238 | \u6682\u505c\u4ee3\u91d1\u5238\u6279\u6b21| marketing_favor_stock_pause| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u4ee3\u91d1\u5238 | \u91cd\u542f\u4ee3\u91d1\u5238\u6279\u6b21| marketing_favor_stock_restart| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u4ee3\u91d1\u5238 | \u6761\u4ef6\u67e5\u8be2\u6279\u6b21\u5217\u8868| marketing_favor_stock_list| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u4ee3\u91d1\u5238 | \u67e5\u8be2\u6279\u6b21\u8be6\u60c5| marketing_favor_stock_detail | \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u4ee3\u91d1\u5238 | \u67e5\u8be2\u4ee3\u91d1\u5238\u8be6\u60c5| marketing_favor_coupon_detail| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u4ee3\u91d1\u5238 | \u67e5\u8be2\u4ee3\u91d1\u5238\u53ef\u7528\u5546\u6237| marketing_favor_stock_merchant | \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u4ee3\u91d1\u5238 | \u67e5\u8be2\u4ee3\u91d1\u5238\u53ef\u7528\u5355\u54c1| marketing_favor_stock_item| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u4ee3\u91d1\u5238 | \u6839\u636e\u5546\u6237\u53f7\u67e5\u7528\u6237\u7684\u5238| marketing_favor_user_coupon| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u4ee3\u91d1\u5238 | \u4e0b\u8f7d\u6279\u6b21\u6838\u9500\u660e\u7ec6| marketing_favor_use_flow| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u4ee3\u91d1\u5238 | \u4e0b\u8f7d\u6279\u6b21\u9000\u6b3e\u660e\u7ec6| marketing_favor_refund_flow| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u4ee3\u91d1\u5238 | \u8bbe\u7f6e\u6d88\u606f\u901a\u77e5\u5730\u5740| marketing_favor_callback_update| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u521b\u5efa\u5546\u5bb6\u5238 | marketing_busifavor_stock_create | \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u67e5\u8be2\u5546\u5bb6\u5238\u8be6\u60c5| marketing_busifavor_stock_query| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u6838\u9500\u7528\u6237\u5238 | marketing_busifavor_coupon_use | \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u6839\u636e\u8fc7\u6ee4\u6761\u4ef6\u67e5\u8be2\u7528\u6237\u5238 | marketing_busifavor_user_coupon| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u67e5\u8be2\u7528\u6237\u5355\u5f20\u5238\u8be6\u60c5| marketing_busifavor_coupon_detail| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u4e0a\u4f20\u9884\u5b58 code | marketing_busifavor_couponcode_upload | \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u8bbe\u7f6e\u5546\u5bb6\u5238\u4e8b\u4ef6\u901a\u77e5\u5730\u5740 | marketing_busifavor_callback_update| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u67e5\u8be2\u5546\u5bb6\u5238\u4e8b\u4ef6\u901a\u77e5\u5730\u5740 | marketing_busifavor_callback_query | \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u5173\u8054\u8ba2\u5355\u4fe1\u606f| marketing_busifavor_coupon_associate| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u53d6\u6d88\u5173\u8054\u8ba2\u5355\u4fe1\u606f| marketing_busifavor_coupon_disassociate | \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u4fee\u6539\u6279\u6b21\u9884\u7b97| marketing_busifavor_stock_budget | \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u4fee\u6539\u5546\u5bb6\u5238\u57fa\u672c\u4fe1\u606f| marketing_busifavor_stock_modify | \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u7533\u8bf7\u9000\u5238 | marketing_busifavor_coupon_return| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u4f7f\u5238\u5931\u6548 | marketing_busifavor_coupon_deactivate | \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u8425\u9500\u8865\u5dee\u4ed8\u6b3e| marketing_busifavor_subsidy_pay| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u5546\u5bb6\u5238 | \u67e5\u8be2\u8425\u9500\u8865\u5dee\u4ed8\u6b3e\u5355\u8be6\u60c5 | marketing_busifavor_subsidy_query| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u59d4\u6258\u8425\u9500 | \u5efa\u7acb\u5408\u4f5c\u5173\u7cfb| marketing_partnership_build| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u59d4\u6258\u8425\u9500 | \u67e5\u8be2\u5408\u4f5c\u5173\u7cfb\u5217\u8868| marketing_partnership_query| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u6d88\u8d39\u5361 | \u53d1\u653e\u6d88\u8d39\u5361 | marketing_card_send | \u662f| \u5426|\n| \u8425\u9500\u5de5\u5177 | \u652f\u4ed8\u6709\u793c | \u521b\u5efa\u5168\u573a\u6ee1\u989d\u9001\u6d3b\u52a8| marketing_paygift_activity_create| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u652f\u4ed8\u6709\u793c | \u67e5\u8be2\u6d3b\u52a8\u8be6\u60c5\u63a5\u53e3| marketing_paygift_activity_detail| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u652f\u4ed8\u6709\u793c | \u67e5\u8be2\u6d3b\u52a8\u53d1\u5238\u5546\u6237\u53f7| marketing_paygift_merchants_list | \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u652f\u4ed8\u6709\u793c | \u67e5\u8be2\u6d3b\u52a8\u6307\u5b9a\u5546\u54c1\u5217\u8868| marketing_paygift_goods_list | \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u652f\u4ed8\u6709\u793c | \u7ec8\u6b62\u6d3b\u52a8 | marketing_paygift_activity_terminate| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u652f\u4ed8\u6709\u793c | \u65b0\u589e\u6d3b\u52a8\u53d1\u5238\u5546\u6237\u53f7| marketing_paygift_merchant_add | \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u652f\u4ed8\u6709\u793c | \u83b7\u53d6\u652f\u4ed8\u6709\u793c\u6d3b\u52a8\u5217\u8868| marketing_paygift_activity_list| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u652f\u4ed8\u6709\u793c | \u5220\u9664\u6d3b\u52a8\u53d1\u5238\u5546\u6237\u53f7| marketing_paygift_merchant_delete| \u662f| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u94f6\u884c\u5b9a\u5411\u6d3b\u4fc3 | \u51fa\u884c\u5238\u5207\u5361\u7ec4\u4ef6\u9884\u4e0b\u5355| industry_coupon_token| \u5426| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u94f6\u884c\u5b9a\u5411\u6d3b\u4fc3 | \u5bfc\u5165\u5b9a\u5411\u7528\u6237\u534f\u8bae\u53f7| bank_package_file| \u5426| \u662f|\n| \u8425\u9500\u5de5\u5177 | \u56fe\u7247\u4e0a\u4f20 | \u56fe\u7247\u4e0a\u4f20(\u8425\u9500\u4e13\u7528)| marketing_image_upload| \u662f| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u5546\u5bb6\u8f6c\u8d26\u5230\u96f6\u94b1 | \u53d1\u8d77\u5546\u5bb6\u8f6c\u8d26 | transfer_batch | \u662f| \u5426|\n| \u8d44\u91d1\u5e94\u7528 | \u5546\u5bb6\u8f6c\u8d26\u5230\u96f6\u94b1 | \u5fae\u4fe1\u6279\u6b21\u5355\u53f7\u67e5\u8be2\u6279\u6b21\u5355| transfer_query_batchid | \u662f| \u5426|\n| \u8d44\u91d1\u5e94\u7528 | \u5546\u5bb6\u8f6c\u8d26\u5230\u96f6\u94b1 | \u5fae\u4fe1\u660e\u7ec6\u5355\u53f7\u67e5\u8be2\u660e\u7ec6\u5355| transfer_query_detail_id | \u662f| \u5426|\n| \u8d44\u91d1\u5e94\u7528 | \u5546\u5bb6\u8f6c\u8d26\u5230\u96f6\u94b1 | \u5546\u5bb6\u6279\u6b21\u5355\u53f7\u67e5\u8be2\u6279\u6b21\u5355| transfer_query_out_batch_no | \u662f| \u5426|\n| \u8d44\u91d1\u5e94\u7528 | \u5546\u5bb6\u8f6c\u8d26\u5230\u96f6\u94b1 | \u5546\u5bb6\u660e\u7ec6\u5355\u53f7\u67e5\u8be2\u660e\u7ec6\u5355| transfer_query_out_detail_no | \u662f| \u5426|\n| \u8d44\u91d1\u5e94\u7528 | \u5546\u5bb6\u8f6c\u8d26\u5230\u96f6\u94b1 | \u8f6c\u8d26\u7535\u5b50\u56de\u5355\u7533\u8bf7\u53d7\u7406 | transfer_bill_receipt | \u662f| \u5426|\n| \u8d44\u91d1\u5e94\u7528 | \u5546\u5bb6\u8f6c\u8d26\u5230\u96f6\u94b1 | \u67e5\u8be2\u8f6c\u8d26\u7535\u5b50\u56de\u5355| transfer_query_bill_receipt | \u662f| \u5426|\n| \u8d44\u91d1\u5e94\u7528 | \u5546\u5bb6\u8f6c\u8d26\u5230\u96f6\u94b1 | \u8f6c\u8d26\u660e\u7ec6\u7535\u5b50\u56de\u5355\u53d7\u7406| transfer_detail_receipt | \u662f| \u5426|\n| \u8d44\u91d1\u5e94\u7528 | \u5546\u5bb6\u8f6c\u8d26\u5230\u96f6\u94b1 | \u67e5\u8be2\u8f6c\u8d26\u660e\u7ec6\u7535\u5b50\u56de\u5355\u53d7\u7406\u7ed3\u679c| transfer_query_receipt | \u662f| \u5426|\n| \u8d44\u91d1\u5e94\u7528 | \u5206\u8d26 | \u8bf7\u6c42\u5206\u8d26 | profitsharing_order | \u662f| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u5206\u8d26 | \u67e5\u8be2\u5206\u8d26\u7ed3\u679c| profitsharing_order_query | \u662f| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u5206\u8d26 | \u8bf7\u6c42\u5206\u8d26\u56de\u9000| profitsharing_return| \u662f| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u5206\u8d26 | \u67e5\u8be2\u5206\u8d26\u56de\u9000\u7ed3\u679c| profitsharing_return_query| \u662f| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u5206\u8d26 | \u89e3\u51bb\u5269\u4f59\u8d44\u91d1| profitsharing_unfreeze| \u662f| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u5206\u8d26 | \u67e5\u8be2\u5269\u4f59\u5f85\u5206\u91d1\u989d| profitsharing_amount_query| \u662f| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u5206\u8d26 | \u67e5\u8be2\u6700\u5927\u5206\u8d26\u6bd4\u4f8b| profitsharing_config_query| \u5426| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u5206\u8d26 | \u6dfb\u52a0\u5206\u8d26\u63a5\u6536\u65b9| profitsharing_add_receiver| \u662f| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u5206\u8d26 | \u5220\u9664\u5206\u8d26\u63a5\u6536\u65b9| profitsharing_delete_receiver| \u662f| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u5206\u8d26 | \u7533\u8bf7\u5206\u8d26\u8d26\u5355| profitsharing_bill| \u662f| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u5206\u8d26 | \u4e0b\u8f7d\u8d26\u5355 | download_bill| \u662f| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u8fde\u9501\u54c1\u724c\u5206\u8d26 | \u8bf7\u6c42\u5206\u8d26 | brand_profitsharing_order | \u5426| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u8fde\u9501\u54c1\u724c\u5206\u8d26 | \u67e5\u8be2\u5206\u8d26\u7ed3\u679c| brand_profitsharing_order_query| \u5426| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u8fde\u9501\u54c1\u724c\u5206\u8d26 | \u8bf7\u6c42\u5206\u8d26\u56de\u9000| brand_profitsharing_return| \u5426| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u8fde\u9501\u54c1\u724c\u5206\u8d26 | \u67e5\u8be2\u5206\u8d26\u56de\u9000\u7ed3\u679c| brand_profitsharing_return_query | \u5426| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u8fde\u9501\u54c1\u724c\u5206\u8d26 | \u5b8c\u7ed3\u5206\u8d26 | brand_profitsharing_unfreeze | \u5426| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u8fde\u9501\u54c1\u724c\u5206\u8d26 | \u67e5\u8be2\u5269\u4f59\u5f85\u5206\u91d1\u989d| brand_profitsharing_amount_query | \u5426| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u8fde\u9501\u54c1\u724c\u5206\u8d26 | \u67e5\u8be2\u6700\u5927\u5206\u8d26\u6bd4\u4f8b| brand_profitsharing_config_query | \u5426| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u8fde\u9501\u54c1\u724c\u5206\u8d26 | \u6dfb\u52a0\u5206\u8d26\u63a5\u6536\u65b9| brand_profitsharing_add_receiver | \u5426| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u8fde\u9501\u54c1\u724c\u5206\u8d26 | \u5220\u9664\u5206\u8d26\u63a5\u6536\u65b9| brand_profitsharing_delete_receiver| \u5426| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u8fde\u9501\u54c1\u724c\u5206\u8d26 | \u7533\u8bf7\u5206\u8d26\u8d26\u5355| profitsharing_bill| \u5426| \u662f|\n| \u8d44\u91d1\u5e94\u7528 | \u8fde\u9501\u54c1\u724c\u5206\u8d26 | \u4e0b\u8f7d\u8d26\u5355 | download_bill| \u662f| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u5546\u6237\u5f00\u6237\u610f\u613f\u786e\u8ba4 | \u63d0\u4ea4\u7533\u8bf7\u5355 | apply4subject_submit| \u5426| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u5546\u6237\u5f00\u6237\u610f\u613f\u786e\u8ba4 | \u64a4\u9500\u7533\u8bf7\u5355 | apply4subject_cancel| \u5426| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u5546\u6237\u5f00\u6237\u610f\u613f\u786e\u8ba4 | \u67e5\u8be2\u7533\u8bf7\u5355\u5ba1\u6838\u7ed3\u679c| apply4subject_query | \u5426| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u5546\u6237\u5f00\u6237\u610f\u613f\u786e\u8ba4 | \u83b7\u53d6\u5546\u6237\u5f00\u6237\u610f\u613f\u786e\u8ba4\u72b6\u6001 | apply4subject_state | \u5426| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u6d88\u8d39\u8005\u6295\u8bc9 2.0 | \u67e5\u8be2\u6295\u8bc9\u5355\u5217\u8868| complaint_list_query| \u662f| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u6d88\u8d39\u8005\u6295\u8bc9 2.0 | \u67e5\u8be2\u6295\u8bc9\u5355\u8be6\u60c5| complaint_detail_query| \u662f| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u6d88\u8d39\u8005\u6295\u8bc9 2.0 | \u67e5\u8be2\u6295\u8bc9\u534f\u5546\u5386\u53f2| complaint_history_query | \u662f| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u6d88\u8d39\u8005\u6295\u8bc9 2.0 | \u521b\u5efa\u6295\u8bc9\u901a\u77e5\u56de\u8c03\u5730\u5740| complaint_notification_create| \u662f| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u6d88\u8d39\u8005\u6295\u8bc9 2.0 | \u67e5\u8be2\u6295\u8bc9\u901a\u77e5\u56de\u8c03\u5730\u5740| complaint_notification_query | \u662f| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u6d88\u8d39\u8005\u6295\u8bc9 2.0 | \u66f4\u65b0\u6295\u8bc9\u901a\u77e5\u56de\u8c03\u5730\u5740| complaint_notification_update| \u662f| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u6d88\u8d39\u8005\u6295\u8bc9 2.0 | \u5220\u9664\u6295\u8bc9\u901a\u77e5\u56de\u8c03\u5730\u5740| complaint_notification_delete| \u662f| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u6d88\u8d39\u8005\u6295\u8bc9 2.0 | \u63d0\u4ea4\u56de\u590d | complaint_response| \u662f| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u6d88\u8d39\u8005\u6295\u8bc9 2.0 | \u53cd\u9988\u5904\u7406\u5b8c\u6210| complaint_complete| \u662f| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u6d88\u8d39\u8005\u6295\u8bc9 2.0 | \u66f4\u65b0\u9000\u6b3e\u5ba1\u6279\u7ed3\u679c| complaint_update_refund| \u662f| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u6d88\u8d39\u8005\u6295\u8bc9 2.0 | \u5546\u6237\u4e0a\u4f20\u53cd\u9988\u56fe\u7247| complaint_image_upload| \u662f| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u6d88\u8d39\u8005\u6295\u8bc9 2.0 | \u56fe\u7247\u4e0b\u8f7d | complaint_image_download| \u662f| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u5546\u6237\u8fdd\u89c4\u901a\u77e5\u56de\u8c03 | \u521b\u5efa\u5546\u6237\u8fdd\u89c4\u901a\u77e5\u56de\u8c03\u5730\u5740 | merchantrisk_callback_create | \u5426| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u5546\u6237\u8fdd\u89c4\u901a\u77e5\u56de\u8c03 | \u67e5\u8be2\u5546\u6237\u8fdd\u89c4\u901a\u77e5\u56de\u8c03\u5730\u5740 | merchantrisk_callback_query| \u5426| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u5546\u6237\u8fdd\u89c4\u901a\u77e5\u56de\u8c03 | \u4fee\u6539\u5546\u6237\u8fdd\u89c4\u901a\u77e5\u56de\u8c03\u5730\u5740 | merchantrisk_callback_update | \u5426| \u662f|\n| \u98ce\u9669\u5408\u89c4 | \u5546\u6237\u8fdd\u89c4\u901a\u77e5\u56de\u8c03 | \u5220\u9664\u5546\u6237\u8fdd\u89c4\u901a\u77e5\u56de\u8c03\u5730\u5740 | merchantrisk_callback_delete | \u5426| \u662f|\n| \u5176\u4ed6\u80fd\u529b | \u56fe\u7247\u4e0a\u4f20 | \u56fe\u7247\u4e0a\u4f20 | image_upload | \u662f| \u662f|\n| \u5176\u4ed6\u80fd\u529b | \u89c6\u9891\u4e0a\u4f20 | \u89c6\u9891\u4e0a\u4f20 | video_upload | \u662f| \u662f|\n| \u5176\u4ed6 | \u7535\u5b50\u53d1\u7968\uff08\u516c\u5171API\uff09 | \u521b\u5efa\u7535\u5b50\u53d1\u7968\u5361\u5238\u6a21\u677f | fapiao_card_template | \u662f | \u662f |\n| \u5176\u4ed6 | \u7535\u5b50\u53d1\u7968\uff08\u516c\u5171API\uff09 | \u914d\u7f6e\u5f00\u53d1\u9009\u9879 | fapiao_set_merchant_config | \u662f | \u662f |\n| \u5176\u4ed6 | \u7535\u5b50\u53d1\u7968\uff08\u516c\u5171API\uff09 | \u67e5\u8be2\u5546\u6237\u914d\u7f6e\u7684\u5f00\u53d1\u9009\u9879 | fapiao_merchant_config | \u662f | \u662f |\n| \u5176\u4ed6 | \u7535\u5b50\u53d1\u7968\uff08\u516c\u5171API\uff09 | \u83b7\u53d6\u62ac\u5934\u586b\u5199\u94fe\u63a5 | fapiao_title_url | \u662f | \u662f |\n| \u5176\u4ed6 | \u7535\u5b50\u53d1\u7968\uff08\u516c\u5171API\uff09 | \u83b7\u53d6\u7528\u6237\u586b\u5199\u7684\u62ac\u5934 | fapiao_title | \u662f | \u662f |\n| \u5176\u4ed6 | \u7535\u5b50\u53d1\u7968(\u533a\u5757\u94fe\u6a21\u5f0f) | \u83b7\u53d6\u5546\u54c1\u548c\u670d\u52a1\u7a0e\u6536\u5206\u7c7b\u5bf9\u7167\u8868 | fapiao_tax_codes | \u662f | \u662f |\n| \u5176\u4ed6 | \u7535\u5b50\u53d1\u7968(\u533a\u5757\u94fe\u6a21\u5f0f) | \u83b7\u53d6\u5546\u6237\u5f00\u7968\u57fa\u7840\u4fe1\u606f | fapiao_merchant_base_info | \u662f | \u662f |\n| \u5176\u4ed6 | \u7535\u5b50\u53d1\u7968(\u533a\u5757\u94fe\u6a21\u5f0f) | \u5f00\u5177\u7535\u5b50\u53d1\u7968 | fapiao_applications | \u662f | \u662f |\n| \u5176\u4ed6 | \u7535\u5b50\u53d1\u7968(\u533a\u5757\u94fe\u6a21\u5f0f) | \u67e5\u8be2\u7535\u5b50\u53d1\u7968 | fapiao_query | \u662f | \u662f |\n| \u5176\u4ed6 | \u7535\u5b50\u53d1\u7968(\u533a\u5757\u94fe\u6a21\u5f0f) | \u51b2\u7ea2\u7535\u5b50\u53d1\u7968 | fapiao_reverse | \u662f | \u662f |\n| \u5176\u4ed6 | \u7535\u5b50\u53d1\u7968(\u81ea\u5efa\u5e73\u53f0\u6a21\u5f0f) | \u4e0a\u4f20\u7535\u5b50\u53d1\u7968\u6587\u4ef6 | fapiao_upload_file | \u662f | \u662f |\n| \u5176\u4ed6 | \u7535\u5b50\u53d1\u7968(\u81ea\u5efa\u5e73\u53f0\u6a21\u5f0f) | \u5c06\u7535\u5b50\u53d1\u7968\u63d2\u5165\u5fae\u4fe1\u7528\u6237\u5361\u5305 | fapiao_insert_cards | \u662f | \u662f |\n| \u5176\u4ed6 | \u94f6\u884c\u7ec4\u4ef6 | \u83b7\u53d6\u5bf9\u79c1\u94f6\u884c\u5361\u53f7\u5f00\u6237\u94f6\u884c | capital_search_bank_number | \u662f | \u662f |\n| \u5176\u4ed6 | \u94f6\u884c\u7ec4\u4ef6 | \u67e5\u8be2\u652f\u6301\u4e2a\u4eba\u4e1a\u52a1\u7684\u94f6\u884c\u5217\u8868 | capital_personal_banks | \u662f | \u662f |\n| \u5176\u4ed6 | \u94f6\u884c\u7ec4\u4ef6 | \u67e5\u8be2\u652f\u6301\u5bf9\u516c\u4e1a\u52a1\u7684\u94f6\u884c\u5217\u8868 | capital_corporate_banks | \u662f | \u662f |\n| \u5176\u4ed6 | \u94f6\u884c\u7ec4\u4ef6 | \u67e5\u8be2\u7701\u4efd\u5217\u8868 | capital_provinces | \u662f | \u662f |\n| \u5176\u4ed6 | \u94f6\u884c\u7ec4\u4ef6 | \u67e5\u8be2\u57ce\u5e02\u5217\u8868 | capital_cities | \u662f | \u662f |\n| \u5176\u4ed6 | \u94f6\u884c\u7ec4\u4ef6 | \u67e5\u8be2\u652f\u884c\u5217\u8868 | capital_branches | \u662f | \u662f |\n\n### \u63a5\u53e3\u51fd\u6570\u53c2\u6570\n\n\u53c2\u6570\u7c7b\u578b\u5bf9\u7167\u53c2\u8003\u4e0b\u8868\uff1a\n\n| \u5fae\u4fe1\u652f\u4ed8\u5b98\u65b9\u6587\u6863\u58f0\u660e | **wechatpayv3 python sdk** |\n| -------------------- | -------------------------- |\n| string | str |\n| int| int |\n| object | dict: {} |\n| array| list: [] |\n| boolean| bool: True, False |\n| message| bytes|\n\n### \u63a5\u53e3\u51fd\u6570\u8fd4\u56de\u503c\n\n\u6bcf\u4e2a\u63a5\u53e3\u5747\u540c\u6b65\u8fd4\u56de code \u548c message\uff0ccode \u4e3a web \u8bf7\u6c42\u5f97\u5230\u7684 HTTP \u72b6\u6001\u7801\uff0cmessage \u4e3a\u670d\u52a1\u5668\u8fd4\u56de\u7684 json \u5b57\u7b26\u4e32\u3002\n\u4f8b\u5916\uff1a\n\n1. \u56de\u8c03\u901a\u77e5\uff08callback\uff09\u63a5\u53e3\u5c06\u6536\u5230\u7684\u53c2\u6570\u89e3\u5bc6\u540e\u8fd4\u56de\uff0c\u56de\u8c03\u9a8c\u8bc1\u4e0d\u5408\u89c4\u6216\u89e3\u5bc6\u5931\u8d25\u5219\u8fd4\u56de None\uff1b\n2. \u4e0b\u8f7d\u8d26\u5355\uff08download_bill\uff09\u548c\u6d88\u8d39\u8005\u6295\u8bc9 2.0 \u7684\u56fe\u7247\u4e0b\u8f7d\uff08complaint_image_download\uff09\u63a5\u53e3\u8fd4\u56de\u7684 message \u4e3a bytes \u7c7b\u578b\uff0c\u76f4\u63a5\u5c06 message \u5199\u5165\u78c1\u76d8\u5373\u53ef\u83b7\u5f97\u5bf9\u5e94\u7684\u76ee\u6807\u6587\u4ef6\u3002\n\n## \u5e38\u89c1\u95ee\u9898\n\n### \u56de\u8c03\u9a8c\u8bc1\u5931\u8d25\u5904\u7406\n\n\u5f00\u53d1\u8005\u9047\u5230\u7684\u96be\u70b9\u4e4b\u4e00\u5c31\u662f\u56de\u8c03\u9a8c\u8bc1\u5931\u8d25\u7684\u95ee\u9898\uff0c\u7531\u4e8e\u4f17\u591a\u7684 python web \u6846\u67b6\u5bf9\u56de\u8c03\u6d88\u606f\u7684\u5904\u7406\u4e0d\u5b8c\u5168\u4e00\u81f4\uff0c\u5982\u679c\u51fa\u73b0\u56de\u8c03\u9a8c\u8bc1\u5931\u8d25\uff0c\u8bf7\u52a1\u5fc5\u786e\u8ba4\u4f20\u5165\u7684 headers \u548c body \u7684\u503c\u548c\u7c7b\u578b\u3002\n\u901a\u5e38\u6846\u67b6\u4f20\u8fc7\u6765\u7684 headers \u7c7b\u578b\u662f dict\uff0c\u800c body \u7c7b\u578b\u662f bytes\u3002flask \u6846\u67b6\u53c2\u8003\u4ee5\u4e0b\u65b9\u6cd5\u53ef\u76f4\u63a5\u83b7\u53d6\u5230\u89e3\u5bc6\u540e\u7684\u5b9e\u9645\u5185\u5bb9\u3002\n\n```python\n@app.route('/notify', methods=['POST'])\ndef notify():\n result = wxpay.callback(request.headers, request.data)\n if result and result.get('event_type') == 'TRANSACTION.SUCCESS':\n resource = result.get('resource')\n appid = resource.get('appid')\n mchid = resource.get('mchid')\n out_trade_no = resource.get('out_trade_no')\n transaction_id = resource.get('transaction_id')\n trade_type = resource.get('trade_type')\n trade_state = resource.get('trade_state')\n trade_state_desc = resource.get('trade_state_desc')\n bank_type = resource.get('bank_type')\n attach = resource.get('attach')\n success_time = resource.get('success_time')\n payer = resource.get('payer')\n amount = resource.get('amount').get('total')\n # TODO: \u6839\u636e\u8fd4\u56de\u53c2\u6570\u8fdb\u884c\u5fc5\u8981\u7684\u4e1a\u52a1\u5904\u7406\uff0c\u5904\u7406\u5b8c\u540e\u8fd4\u56de200\u6216204\n return jsonify({'code': 'SUCCESS', 'message': '\u6210\u529f'})\n else:\n return jsonify({'code': 'FAILED', 'message': '\u5931\u8d25'}), 500\n```\n\n#### flask \u6846\u67b6\n\n\u5982\u4e0a\u9762\u793a\u4f8b\uff0c\u76f4\u63a5\u4f20\u5165 request.headers \u548c request.data \u5373\u53ef\u3002\n\n```python\nresult = wxpay.callback(headers=request.headers, body=request.data)\n```\n\n#### django \u6846\u67b6\n\n\u7531\u4e8e django \u6846\u67b6\u7279\u6b8a\u6027\uff0c\u4f1a\u5c06 headers \u505a\u4e00\u5b9a\u7684\u9884\u5904\u7406\uff0c\u53ef\u4ee5\u53c2\u8003\u4ee5\u4e0b\u65b9\u5f0f\u8c03\u7528\u3002\n\n```python\nheaders = {}\nheaders.update({'Wechatpay-Signature': request.META.get('HTTP_WECHATPAY_SIGNATURE')})\nheaders.update({'Wechatpay-Timestamp': request.META.get('HTTP_WECHATPAY_TIMESTAMP')})\nheaders.update({'Wechatpay-Nonce': request.META.get('HTTP_WECHATPAY_NONCE')})\nheaders.update({'Wechatpay-Serial': request.META.get('HTTP_WECHATPAY_SERIAL')})\nresult = wxpay.callback(headers=headers, body=request.body)\n```\n\n#### tornado \u6846\u67b6\n\n\u76f4\u63a5\u4f20\u5165 request.headers \u548c request.body \u5373\u53ef\u3002\n\n```python\nresult = wxpay.callback(headers=request.headers, body=request.body)\n```\n\n#### \u5176\u4ed6\u6846\u67b6\n\n\u53c2\u8003\u4ee5\u4e0a\u5904\u7406\u65b9\u6cd5\uff0c\u5927\u539f\u5219\u5c31\u662f\u4fdd\u8bc1\u4f20\u7ed9 callback \u7684\u53c2\u6570\u503c\u548c\u6536\u5230\u7684\u503c\u4e00\u81f4\uff0c\u4e0d\u8981\u8f6c\u6362\u4e3a dict\uff0c\u4e5f\u4e0d\u8981\u8f6c\u6362\u4e3a string\u3002\n\n### \u53cd\u590d\u6536\u5230\u540c\u4e00\u4e2a\u56de\u8c03\u6d88\u606f\u600e\u4e48\u5904\u7406\n\n\u5b9e\u9645\u5f00\u53d1\u4e2d\u5904\u7406\u5fae\u4fe1\u652f\u4ed8\u901a\u77e5\u6d88\u606f\u65f6\u6709\u4e24\u4e2a\u95ee\u9898\u9700\u8981\u6ce8\u610f\u3002\u4e00\u662f\u53ef\u80fd\u4f1a\u91cd\u590d\u6536\u5230\u540c\u4e00\u4e2a\u901a\u77e5\u6d88\u606f\uff0c\u9700\u8981\u5728\u4ee3\u7801\u4e2d\u8fdb\u884c\u5224\u65ad\u5904\u7406\u3002\u53e6\u4e00\u4e2a\u662f\u5904\u7406\u6d88\u606f\u7684\u65f6\u95f4\u5982\u679c\u8fc7\u957f\uff0c\u5efa\u8bae\u8003\u8651\u5f02\u6b65\u5904\u7406\uff0c\u5148\u7f13\u5b58\u6d88\u606f\uff0c\u907f\u514d\u5fae\u4fe1\u652f\u4ed8\u670d\u52a1\u5668\u7aef\u8ba4\u4e3a\u8d85\u65f6\uff0c\u5982\u679c\u6301\u7eed\u8d85\u65f6\uff0c\u5fae\u4fe1\u652f\u4ed8\u670d\u52a1\u5668\u7aef\u53ef\u80fd\u4f1a\u8ba4\u4e3a\u56de\u8c03\u6d88\u606f\u63a5\u53e3\u4e0d\u53ef\u7528\u3002\n\n### \u63a5\u53e3\u6e05\u5355\u91cc\u600e\u4e48\u6ca1\u6709\u56de\u8c03\u63a5\u53e3\n\n\u6240\u6709\u7684\u56de\u8c03\u63a5\u53e3\u90fd\u901a\u8fc7\u516c\u7528\u63a5\u53e3 callback \u5904\u7406\uff0c\u56e0\u6b64\u6e05\u5355\u91cc\u6ca1\u6709\u4e00\u4e00\u7f57\u5217\u3002\u5bf9\u4e8e\u6536\u5230\u7684\u56de\u8c03\u6d88\u606f\uff0c\u53ef\u4ee5\u901a\u8fc7 event_type \u53c2\u6570\u5224\u65ad\u6d88\u606f\u7c7b\u578b\u8fdb\u884c\u4e0b\u4e00\u6b65\u5904\u7406\uff0c\u5177\u4f53\u53c2\u6570\u6e05\u5355\u53c2\u8003\u5fae\u4fe1\u652f\u4ed8\u5b98\u65b9\u6587\u6863\u3002\n\n### \u670d\u52a1\u5546\u6a21\u5f0f\u5982\u4f55\u63a5\u5165\n\nSDK \u9ed8\u8ba4\u4e3a\u76f4\u8fde\u5546\u6237\u63a5\u5165\uff0c\u5982\u679c\u521d\u59cb\u5316\u65f6\u5019\u6307\u5b9a partner_mode=True\uff0c\u5373\u5207\u6362\u4e3a\u670d\u52a1\u5546\u6a21\u5f0f\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u4e00\u90e8\u5206\u63a5\u53e3\u4e3a\u76f4\u8fde\u5546\u6237\u4e13\u6709\uff0c\u4e00\u90e8\u5206\u63a5\u53e3\u4e3a\u670d\u52a1\u5546\u6a21\u5f0f\u4e13\u6709\uff0c\u53e6\u6709\u90e8\u5206\u63a5\u53e3\u540c\u65f6\u517c\u5bb9\u76f4\u8fde\u5546\u6237\u548c\u670d\u52a1\u5546\uff0c\u8fd9\u4e9b\u540c\u65f6\u517c\u5bb9\u7684\u63a5\u53e3\u5728\u4e24\u79cd\u6a21\u5f0f\u4e0b\u4e2a\u522b\u53c2\u6570\u8981\u6c42\u4f1a\u7a0d\u6709\u4e0d\u540c\u3002\n\n### \u5982\u4f55\u4e0b\u8f7d\u5e73\u53f0\u8bc1\u4e66\uff1f\n\nSDK \u5185\u90e8\u5df2\u7ecf\u5b9e\u73b0\u4e86\u81ea\u52a8\u4e0b\u8f7d\u548c\u52a0\u8f7d\u5e73\u53f0\u8bc1\u4e66\uff0c\u65e0\u9700\u9884\u5148\u4e0b\u8f7d\u3002\u5982\u9700\u4e86\u89e3\u5177\u4f53\u5b9e\u73b0\u903b\u8f91\uff0c\u53ef\u4ee5\u53c2\u9605[core.py](wechatpayv3/core.py)\u4e2d\u7684\\_update_certificates \u51fd\u6570\u3002\n\n### \u63a5\u53e3\u59cb\u7ec8\u8fd4\u56de 500 \u9519\u8bef\n\n\u901a\u5e38\u4e3a\u521d\u59cb\u5316\u53c2\u6570\u914d\u7f6e\u9519\u8bef\uff0c\u5982\u679c\u53cd\u590d\u68c0\u67e5\u65e0\u679c\uff0c\u5efa\u8bae\u8fdb\u5165\u5fae\u4fe1\u652f\u4ed8\u540e\u53f0\u91cd\u7f6e\u6240\u6709\u53c2\u6570\u540e\u518d\u8bd5\u3002\n\n### \u56de\u8c03\u63a5\u53e3\u59cb\u7ec8\u6821\u9a8c\u5931\u8d25\n\n\u67e5\u9605 web \u6846\u67b6\u6587\u6863\uff0c\u786e\u4fdd\u4f20\u5165 callback \u7684 body \u53c2\u6570\u6ca1\u6709\u7ecf\u8fc7\u4efb\u4f55\u8f6c\u4e49\uff0c\u901a\u5e38\u4e3a bytes \u7c7b\u578b\u3002\n\n### \u4e0b\u8f7d\u5e73\u53f0\u8bc1\u4e66\u65f6\u89e3\u6790\u5931\u8d25\n\n\u68c0\u67e5 APIV3_KEY \u662f\u5426\u548c\u5fae\u4fe1\u652f\u4ed8\u540e\u53f0\u8bbe\u7f6e\u7684\u4e00\u81f4\uff0c\u5982\u65e0\u6cd5\u786e\u8ba4\uff0c\u5efa\u8bae\u91cd\u7f6e\u540e\u518d\u8bd5\u3002\n\n## \u7b7e\u540d\u3001\u9a8c\u7b7e\u3001\u52a0\u5bc6\u3001\u89e3\u5bc6\u7684\u5185\u90e8\u5b9e\u73b0\n\n\u4e00\u822c\u5e94\u7528\u5f00\u53d1\u8005\u53ef\u4ee5\u4e0d\u7528\u5411\u4e0b\u770b\u4e86\uff0c\u6709\u5fc3\u4e86\u89e3\u8fd9\u51e0\u9879\u5185\u90e8\u5b9e\u73b0\u7684\u53ef\u4ee5\u53c2\u8003[\u8fd9\u91cc](security.md)\u4e86\u89e3\u3002\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "[\u4fee\u590d\u7248] \u5fae\u4fe1\u652f\u4ed8 API v3 Python SDK(python sdk for wechatpay v3)\uff0cfork from: https://github.com/minibear2021/wechatpayv3",
"version": "1.2.38",
"split_keywords": [
"python",
"sdk",
"wechatpay",
"api",
"v3",
"\u5fae\u4fe1\u652f\u4ed8"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "e6d59d365239a0d4be29fd79b8296d5a69262acf1d0967884a6a879ca949146e",
"md5": "9aae86d27c724757bea46caaca8aff49",
"sha256": "fba1ee9fc6c3779588bc242a6a99f083e4263c7af54a3cea299976c541df61c6"
},
"downloads": -1,
"filename": "wechatpayv3-fix-1.2.38.tar.gz",
"has_sig": false,
"md5_digest": "9aae86d27c724757bea46caaca8aff49",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 57500,
"upload_time": "2023-03-11T14:15:28",
"upload_time_iso_8601": "2023-03-11T14:15:28.355639Z",
"url": "https://files.pythonhosted.org/packages/e6/d5/9d365239a0d4be29fd79b8296d5a69262acf1d0967884a6a879ca949146e/wechatpayv3-fix-1.2.38.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-03-11 14:15:28",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "houxiaohou",
"github_project": "wechatpayv3",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "wechatpayv3-fix"
}