开发指引

更新时间:2023.08.22

# 1. 接口规则

为了在保证支付安全的前提下,带给商户简单、一致且易用的开发体验,我们推出了全新的微信支付APIv3接口。该版本API的具体规则请参考APIv3接口规则

# 2. 开发准备

# 2.1. 搭建和配置开发环境

为了帮助开发者调用开放接口,我们提供了JAVA、PHP、GO三种语言版本的开发库,封装了签名生成、签名验证、敏感信息加/解密、媒体文件上传 等基础功能(更多语言版本的开发库将在近期陆续提供)。

测试步骤:

1、根据自身开发语言,选择对应的开发库并构建项目,具体配置请参考下面链接的详细说明:

更多资源可前往微信支付开发者社区 (opens new window)搜索查看。

2、创建加载商户私钥、加载平台证书、初始化httpClient的通用方法。

示例代码

3、基于接口的示例代码,替换请求参数后可发起测试。

说明:

  • 上面的开发库为微信支付官方开发库,其它没有审核或者控制下的第三方工具和库,微信支付不保证它们的安全性和可靠性。通过包管理工具引入SDK后,可根据下面每个接口的示例代码替换相关参数后进行快速测试。
  • 开发者如果想详细了解签名生成、签名验证、敏感信息加/解密、媒体文件上传等常用方法的具体代码实现,可阅读下面的详细说明:
  1. 签名生成
  2. 签名验证
  3. 敏感信息加解密
  4. merchantPrivateKey(私钥)
  5. wechatpayCertificates(平台证书)
  6. APIV3Key(V3 key)
  • 如想更详细的了解我们的接口规则,可查看我们的接口规则指引文档

# 3. 快速接入

# 3.1. 业务流程图

# 业务流程时序图

时序图

申请单状态变化如下:

步骤图

重点步骤说明:

步骤1: 获取微信支付商户号:渠道商使用银行或者支付机构提供的API或者后台系统录入商家门店信息,获取商家每个门店在微信支付侧的商户号(上送给微信支付的“商户名称”字段必须与营业执照上商户名称一致,具体规则 点击查看 (opens new window) )。

步骤2: 查询微信支付商户号授权状态:渠道商使用《获取商户号开户意愿确认状态接口》查询微信支付商户号是否完成开户意愿确认。

步骤5: 提交商家资料给微信支付:渠道商根据商家类型(企业、个体户、小微、事业单位、其他组织等)准备好相关的商家资料,使用微信支付接口《提交开户意愿确认申请单》获取微信支付申请单编号。

步骤8: 查询申请单审核结果:渠道商提交商家资料后,建议每隔五分钟调用《查询申请单审核结果接口》查询申请单审核结果。

# 申请单正常情况下的状态转换如下

  1. 提交后申请单状态为“审核中”,微信支付后台会进行审核,审核通过后申请单状态变成“待联系人确认”,同时接口会提供“申请单小程序码” (小程序码的图片)。
  2. 联系人扫“申请单小程序码”后确认资料无误后,申请单状态变成“待账户验证”。
  3. 联系人将“法人确认二维码”在微信上发给法人确认后(或打款验证),申请单状态变成“审核通过”。
  • 当审核结果为“审核驳回”时,请根据驳回原因重新提交商家资料,重新提交前请使用《撤销原申请单》,再次提交新的商家资料。
  • 当审核结果为“待联系人确认”或“待账户验证”或“审核通过”时,接口会同时给出“申请单小程序码”。

# 3.2. API接入(含示例代码)

文档展示了如何使用微信支付服务端 SDK 快速接入支付有礼,完成与微信支付对接的部分。

注意

  • 文档中的代码示例是用来阐述 API 基本使用方法,代码中的示例参数需替换成商户自己账号及请求参数才能跑通
  • 以下接入步骤仅提供参考,请商户结合自身业务需求进行评估、修改。

# 3.2.1. 【服务端】提交申请单

步骤说明: 服务商收集商户资料后,调用提交申请单接口,提交创建入驻申请单。

示例代码

重要入参说明

  • out_trade_no: 业务申请编号,服务商自定义的唯一编号,每个编号对应一个申请单。

  • subject_type: 主体类型。枚举值:

    • SUBJECT_TYPE_ENTERPRISE:企业
    • SUBJECT_TYPE_INSTITUTIONS_CLONED:事业单位
    • SUBJECT_TYPE_INDIVIDUAL:个体工商户
    • SUBJECT_TYPE_OTHERS:其他组织
    • SUBJECT_TYPE_MICRO:小微商户
  • licence_number: 营业执照注册号。校验规则:

    • 请填写营业执照上的注册号。
    • 若主体类型为个体工商户或企业,注册号格式须为15位数字或18位数字|大写字母。
  • merchant_name: 商户名称。

    • 个体工商户,不能以“公司”结尾。
    • 个体工商户,若营业执照上商户名称为空或为“无”,请填写"个体户+经营者姓名",如“个体户张三”。
  • legal_person: 法人姓名。

    • 只能由中文字符、英文字符、可见符号组成。
    • 请填写营业执照的经营者/法定代表人姓名。

更多参数、响应详情及错误码请参见提交申请单接口文档。

# 3.2.2.【服务端】撤销申请单

步骤说明: 服务商提交申请单后需要修改信息时,或者申请单审核结果为“已驳回”时服务商要修改申请材料时,均需要先调用撤销申请单接口。

示例代码

重要入参说明:

  • applyment_id: 申请单编号,微信支付分配的申请单号,申请单编号和业务申请编号至少传一个。
  • business_code: 业务申请编号。

更多参数、响应详情及错误码请参见撤销申请单接口文档。

# 3.2.3. 【服务端】查询申请单审核结果

步骤说明: 查询申请单审核结果。

示例代码

重要入参说明:

  • applyment_id: 申请单编号,微信支付分配的申请单号,申请单编号和业务申请编号至少传一个。
  • business_code: 业务申请编号。
    • 服务商自定义的唯一编号。
    • 每个编号对应一个申请单。

更多参数、响应详情及错误码请参见撤销申请单接口文档。 origin/master

# 3.2.4. 【服务端】获取商户开户意愿确认状态

步骤说明: 当服务商需要确认微信支付子商户号是否完成确认时,如果调用此接口提到“已授权”状态,则说明该商户号已完成开户意愿确认。

示例代码

重要入参说明:

  • sub_mchid: 特约商户号,微信支付分配的特约商户的唯一标识。

更多参数、响应详情及错误码请参见获取商户开户意愿确认状态接口文档。

# 4. 常见问题

# Q1:商户开户意愿调用“提交申请单”返回:暂未查询到该营业执照注册号,请检查营业执照注册号是否填写正确

A1:请求参数“营业执照注册号(licence_number)”填写错误,请填写营业执照上的注册号,若主体类型为个体工商户或企业,注册号格式须为15位数字或18位数字|大写字母。

# Q2:商户开户意愿调用“提交申请单”返回:系统繁忙,请稍后重试

A2:请按照以下几点检查:

  1. 系统异常,请使用相同参数稍后重新调用;
  2. 请求参数错误,请确认参数的大小写、参数名、格式是否与接口文档一致;
  3. 请求头里面的参数mchid错误,也会报这个错误,请检查确认。

# Q3:商户开户意愿调用“撤消申请单”返回:查询申请单不存在,请检查申请单号是否正确

A3:请求参数申请单编号(applyment_id)填写错误或没有填写,请填写微信支付分配的申请单号,申请单编号和业务申请编号至少传一个。

# Q4:商户开户意愿调用“获取特约商户授权状态”返回:Authorization不合法

A4:请按照以下几点检查:

  1. Authorization头认证类型或签名信息错误,请严格按照文档要求填写参数。

    • Authorization头认证类型目前为WECHATPAY2-SHA256-RSA2048。
    • Authorization头签名信息包括发起请求的商户(渠道商)的商户号mchid。
      • 商户API证书序列号serial_no,用于声明所使用的证书
      • 请求随机串nonce_str
      • 时间戳timestamp
      • 签名值signature
  2. Authorization头参数存在换行,实际数据应在一行。

# Q5:商户开户意愿调用“提交申请单”返回:商户未申请过证书,请到商户平台上申请证书授权机构颁发的证书

A5:请按照错误提示,到商户平台上申请下载API证书并正确使用,请参考以下几点:

  1. 证书获取指引 (opens new window)
  2. 如何在程序中加载证书 (opens new window)

# Q6:商户开户意愿调用“撤销申请单”返回:无法将传入参数“申请单编号”转换为uint64类型

A6:请求参数类型填写错误,正确的参数类型是uint64。