支付API相关
微信支付API:
https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml
微信支付普通商户与AppID账号关联管理
第一步:商户登录微信支付商户平台【pay.weixin.qq.com/】->产品中心->AppID账号管理->我关联的AppID账号->+关联AppID,即可新增AppID账号;
注意:
-
一个商户号最多可关联50个AppID账号;
-
当AppID账号主体与商户号主体不一致时,需要补充填写AppID主体信息;AppID及其主体信息查询指引
https://kf.qq.com/faq/1801116VJfua1801113QVNVz.html
产品大全 / 产品详情/现金红包
发放方式
方式一:接口发放
商户根据开发文档进行开发,一次调用可以给一个指定用户发送一个指定金额的红包,满足多元化的运营需求。
方式二:通过上传openid文件发放
收集要发送红包对象的openid,将openid编辑成txt文件,登录微信支付商户平台,使用上传文件功能发放。一份文件对应一个红包模板,便于管理。
方式三:配置营销规则“满额送”发放
商户可以在商户平台配置自助规则:用户使用微信支付发生交易满足一定条件,立送现金红包
https://pay.weixin.qq.com/index.php/public/product/detail?pid=4
微信企业付款到零钱 【微信目前最新的叫 商家转账到零钱】
费用:
免费
使用:
关于微信企业付款到零钱,请注意以下几点:
1. 确保微信商户平台(产品中心)中已开通「企业付款到用户」产品。
2. 微信企业付款支持向指定微信用户的 openid 付款,单笔付款最低额度为 0.3 元(接口 API 付款默认为 1 元,如需调整请前往微信商户平台“产品中心 -> 企业付款到零钱 -> 产品设置”进行修改),小于企业账户充值金额的可用余额。
3. 旧资金流结算商户,发送微信企业付款将扣除商户的可用余额,可用余额并不是微信支付交易额,需要预先充值,确保可用余额充足。 新资金流结算商户,发送微信企业付款将扣除基本账户中的金额,若基本账户中的余额不足,可预先充值。(商户如何判断自己是新资金流或旧资金流结算模式:新旧资金流的区别)
4. 付款资金将进入目标用户的零钱(微信—我—钱包—零钱),微信支付将做零钱入账消息通知,零钱收支明细会展示相应记录。
登录微信支付商户平台「产品中心」页面(点击登录)查看是否开通「企业付款到用户」产品。
限额:
-
不支持给非实名用户打款
-
给同一个实名用户付款,单笔单日限额 5000/5000
-
一个商户号同一日付款总额限额 10 万元
-
单笔付款最低额度:0.3 元 (接口 API 付款默认为 1 元,如需调整请前往“产品中心->企业付款到零钱->产品设置”进行修改)
-
默认每天最多可向同一个用户付款 10 次,可以在“商户平台->API 安全”进行设置
-
给同一个用户付款时间间隔不得低于 15 秒
注意:以上规则中的限额 5000、10 万由于计算规则与风控策略的关系,不是完全精确值,金额仅做参考,应以接口实际返回和查询结果为准,请知晓。
https://help.pingxx.com/article/133367
channelstring | 付款使用的第三方支付渠道名称。目前支持 wx (微信 App)、wx_pub (微信 JSAPI)、wx_lite (微信小程序)、alipay (支付宝)、unionpay (银联电子代付)、allinpay (通联代付)、jdpay (京东代付)和balance (余额)。 |
https://www.pingxx.com/api/Transfers%20%E4%BC%81%E4%B8%9A%E4%BB%98%E6%AC%BE%E6%A6%82%E8%BF%B0.html
什么是微信红包?
微信红包是微信支付推出的一款基于微信客户端的免费服务应用,Ping++ 支持微信现金红包接口。通过该接口,具有微信公众账号支付的商户可以直接通过调用 Ping++ Server SDK 给该公众号下的 open_id 指定用户发送现金红包。
另外 App 内也可以支持商家给用户发送红包。但由于商家需要提前获取该用户的 open_id ,故该用户需前期和商家产生过交易,才能收取商家发送的红包。
关于微信红包
申请红包条件:
T+0 结算商户需满足两个条件:1、入驻满90天,2、截止今日往回推30天内连续正常交易。
其余结算周期的商户无限制,可立即前往【商户平台】->【产品中心】申请开通。
发送红包需要注意以下几点:
收送频率规则
-
每分钟发送红包数量不能超过 1800 个;
-
同一个商户号,每分钟最多给同一个用户发送一个红包;
红包规则
-
单个红包金额介于人民币 1 元 ~ 200 元之间;额度最高可提高至4999元(如何调整现金红包额度?)
-
同一个红包只能发送给一个用户;
-
红包发放后 24 小时未被领取将进行退款;
资金扣除规则
-
结算周期为T+N的商户(旧资金流商户),发放现金红包将扣除商户的可用余额,可用余额并不是微信支付交易额,需预先充值,确保可用余额充足。
查看余额、充值、提现请登录 微信支付商户平台,进入资金管理菜单,进行操作。
-
结算周期为T+0的商户(新资金流商户),发放现金红包将扣除商户的基本账户中的金额,若基本账户中的余额不足,可预先充值。(T+N、T+0的区别请参考链接:新旧资金流的区别)
发送红包流程
发送红包只需要在服务器接入 Ping++ Server SDK ,调用 SDK 提供的发送红包方法即可。
服务器成功发送红包后,指定用户的微信中有红包的提示,用户进入微信领取即可。
现金红包
https://help.pingxx.com/article/173418
channelstring | 红包使用的第三方支付渠道。目前仅支持 wx_pub 。 |
https://www.pingxx.com/api/Red%20Envelopes%20%E7%BA%A2%E5%8C%85%E6%A6%82%E8%BF%B0.html
https://help.pingxx.com/article/1011655/
企业付款支持哪些方式?
https://help.pingxx.com/article/133366/
H5 SDK 接入指南
目前 Ping++ 的 H5 SDK 支持的渠道包含:
- 手机网页支付:支付宝手机网站支付(
alipay_wap
)、跨境支付宝手机网站支付(cb_alipay_wap
)、百度钱包(bfb_wap
)、银联手机网站支付(upacp_wap
)、微信 H5 支付(wx_wap
)、易宝支付(yeepay_wap
)、京东支付(jdpay_wap
)、招行一网通支付(cmb_wallet
)、PayPal(paypal
) - PC 网页支付:支付宝电脑网站支付 (
alipay_pc_direct
) 、招行 PC 扫码支付(cmb_pc_qr
)、跨境支付宝电脑网站支付 (cb_alipay_pc_direct
) 、银联网关支付 (upacp_pc
) 、京东支付(jdpay_wap
)、PayPal(paypal
)、银联电子企业网银支付 (cp_b2b
) 、银联企业网银支付(upacp_b2b
)、建行 PC 网页支付(ccb_qr
) - 其他:微信小程序支付(
wx_lite
)、支付宝小程序支付(alipay_lite
)、微信 JSAPI 支付(wx_pub
)、跨境微信 JSAPI 支付(cb_wx_pub
)、QQ 公众号支付(qpay_pub
)、线下扫码固定码(isv_wap
)
注: 【Ping++ 对象】包含: Charge
、Order
、Recharge
。
https://www.pingxx.com/docs/client/web
JSAPI支付是指商户通过调用微信支付提供的JSAPI接口,在支付场景中调起微信支付模块完成收款。
应用场景有:
线下场所:调用接口生成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付
公众号场景:用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付
PC网站场景:在网站中展示二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付
H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。主要用于触屏版的手机浏览器请求微信支付的场景。可以方便的从外部浏览器唤起微信支付。
https://kf.qq.com/touch/faq/151210NZzmuY151210ZRj2y2.html
企业付款到零钱
运营指南
更新时间:2023.01.11
已获得商家转账到零钱产品权限的商户号,可通过「商户平台 -> 产品中心 -> (运营工具)商家转账到零钱 -> 前往功能」完成各项设置、通过页面发起转账和查询转账记录。
#1. 充值资金
发起转账前,需要向运营账户中充值。在【微信支付商户平台 -> 交易中心 -> 充值/转入】选择入款账户为「运营账户」,支持网银充值、扫码充值和转账充值。
使用转账充值需在「商户平台 -> 产品中心 -> (资金解决方案模块)转账充值」先开通转账充值权限。
#2. 设置转账发起方式
商家转账的发起方式分为两种:「API发起转账」和「页面发起转账」,使用商家转账至少开启一种方式。
使用页面发起转账,无需开发,验证操作密码后即可开启页面发起转账功能。
使用API发起转账,需要额外设置转账验密人,并且在开启后设置「接口安全」才可发起转账,详见API发起转账的相关配置。
#3. API发起转账的相关配置
#3.1. 设置验密人
商家转账验密功能是商家转账产品下的资金安全管理工具,在转账请求发起后,验密人需要在微信支付商家助手进行安全确认后,才可发起转账交易。
在开启API发起转账模式后,可设置转账验密人,转账验密人必须为员工账号(可在「微信支付商户平台 -> 账户中心 -> 员工账号管理」中增加和管理)。
验密消息24小时内有效,过期后将自动关闭,可在微信支付商家助手小程序的消息中心查看已关闭的付款。
#3.2. 设置免密功能
转账验密是商家转账到零钱下的资金安全管理工具,商户可通过转账验密保障出资安全,即通过api发起转账请求后,需验密人在移动端确认信息才可出资。具体规则如下:
可通过商家助手/服务商助手小程序 - 商家转账进入出资管理页面,可逐笔确认,也可以批量选择最多50条进行确认。
在保障安全的前提下,为提高付款效率,商家可以申请一定的免密额度(0-2万),单次向单用户发起转账(单个明细单)的金额若在该额度内,将跳过转账验密流程,直接执行转账。
在免密额度内,若平台监测到出资风险,仍会向验密人发起验密请求,请留意验密消息。
验密确认不代表转账成功,实际转账结果需以接口查询的明细单状态、转账记录或转账账单为准。
免密额度最高可设置为20,000元,需按提示完成安全设置后才可设置成功。
安全设置包括设置操作密码、安全联系人 (opens new window)及安全医生 (opens new window)。
#3.3. 设置接口安全
此处填写用于API发起转账的服务器IP地址,具体IP可以自行联系贵司内部技术同事获取。
只有指定的IP地址才可通过API接口发起商家转账,设置该项可以有效避免计划外IP发起转账,保障资金安全。
同时微信支付提供了免费的系统安全检测服务,请求商家转账API的服务器IP地址,应先在安全医生中通过安全诊断。
#4. 设置转账额度
商户在功能页面可以操作调整的额度包括“商户号单日转账额度”和“单笔转账最低金额”。
其他额度不支持修改(“单笔转账最高额度”、“单日向单用户转账额度”,详见产品介绍-商家转账到零钱转账规则
#4.1. 设置单日转账额度
单日转账额度为商户号单日累计可出资的最大额度。为保障资金安全,建议根据业务实际出资情况设置合理值。
单日转账额度最高可设置为1000,000元,需按提示完成安全设置后才可设置成功。
安全设置包括设置操作密码、安全联系人 (opens new window)及安全医生 (opens new window)。
#4.2. 设置单笔转账最低金额
单笔转账最低金额是指商户单次向一名用户转账的最低金额,系统默认为0.3元,也可在商户平台中修改为0.1元。
若单笔转账金额低于0.3元时,用户端收款凭证将不展示转账备注信息,区别如下图
#5. 场景管理
每个商户最多可在商户平台申请3种转账场景 (opens new window)。
商户平台支持新增、删除、管理转账场景,也可查看申请时提交的场景证明材料。
首个获得的转账场景为默认场景,在发起商家转账时需传入实际的场景id,若发起转账时未填入场景id,则使用默认场景id。
管理收款用户列表:
佣金报销、企业报销、企业补贴、服务款项、采购款项场景 只支持向已添加为收款用户列表中的用户发起转账,且该用户已完成微信支付实名认证。
使用这几种场景的商户,请提前添加收款用户至收款用户列表,否则将导致转账失败。
#6. 使用页面发起转账(无需开发)
可从「我的产品-商家转账-产品功能-转账发起方式-页面发起-去使用」进入转账页面,
使用流程:下载模版 -> 填写转账信息并上传 -> 确认出资。
转账规则请至平台下载模版后查看。若超过24小时未确认,系统将关闭转账。确认后资金将转入用户的微信零钱,不可取消。
#7. 查询转帐记录及转账账单
#7.1 查询转账记录及获取电子回单
发起转账后可在「商户平台 -> 产品中心 -> (运营工具模块)商家转账到零钱 - 前往功能」,查看转账记录及获取电子回单。
支持查询2年内的转账记录,可查询当前的转账记录及批次状态(转账中、转账成功及转账失败)。
仅支持传入通过实名校验的用户姓名,来申请电子回单。电子回单可用于证明转账行为的真实性,便于审计、报税。
#7.2 查询账单
商家转账账单支持在商户平台下载5年内账单,次日9点可下载前一天账单(不包括转账状态为转账中的账单)。
https://pay.weixin.qq.com/docs/merchant/products/batch-transfer-to-balance/operation.html#_5-%E5%9C%BA%E6%99%AF%E7%AE%A1%E7%90%86
发起商家转账
更新时间:2023.06.06
发起商家转账接口。商户可以通过该接口同时向多个用户微信零钱进行转账操作。请求消息中应包含商家批次单号、转账名称、appid、转账总金额、转账总笔数、转账openid、收款用户姓名等信息。注意受理成功将返回批次单号,此时并不代表转账成功,请通过查单接口查询单据的付款状态。
#接口说明
#请求参数
-
appid必填【商户appid】 申请商户号的appid或商户号绑定的appid(企业号corpid即为此appid)
-
out_batch_no必填【商家批次单号】 商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一
-
batch_name必填【批次名称】 该笔批量转账的名称
-
batch_remark必填【批次备注】 转账说明,UTF8编码,最多允许32个字符
-
total_amount必填【转账总金额】 转账金额单位为“分”。转账总金额必须与批次内所有明细转账金额之和保持一致,否则无法发起转账操作
-
total_num必填【转账总笔数】 一个转账批次单最多发起一千笔转账。转账总笔数必须与批次内所有明细之和保持一致,否则无法发起转账操作
-
transfer_detail_list必填【转账明细列表】 发起批量转账的明细列表,最多一千笔
- 属性
- 属性
-
transfer_scene_id选填【转账场景ID】 该批次转账使用的转账场景,如不填写则使用商家的默认场景,如无默认场景可为空,可前往“商家转账到零钱-前往功能”中申请。
如:1001-现金营销
请求示例
package com.wechat.pay.java.service.transferbatch; import com.wechat.pay.java.core.RSAConfig; import com.wechat.pay.java.service.transferbatch.model.InitiateBatchTransferRequest; import com.wechat.pay.java.service.transferbatch.model.InitiateBatchTransferResponse; import com.wechat.pay.java.service.transferbatch.model.TransferDetailInput; import java.util.ArrayList; import java.util.List; public class InitiateBatchTransfer { public static String merchantId = ""; public static String privateKeyPath = ""; public static String merchantSerialNumber = ""; public static String wechatPayCertificatePath = ""; public static TransferBatchService service; public static void main(String[] args) { RSAConfig config = new RSAConfig.Builder() .merchantId(merchantId) .privateKeyFromPath(privateKeyPath) .merchantSerialNumber(merchantSerialNumber) .wechatPayCertificatesFromPath(wechatPayCertificatePath) .build(); service = new TransferBatchService.Builder().config(config).build(); InitiateBatchTransferRequest initiateBatchTransferRequest = new InitiateBatchTransferRequest(); initiateBatchTransferRequest.setAppid("wxf636efh567hg4356"); initiateBatchTransferRequest.setOutBatchNo("plfk2020042013"); initiateBatchTransferRequest.setBatchName("2019年1月深圳分部报销单"); initiateBatchTransferRequest.setBatchRemark("2019年1月深圳分部报销单"); initiateBatchTransferRequest.setTotalAmount(4000000L); initiateBatchTransferRequest.setTotalNum(200); { List<TransferDetailInput> transferDetailListList = new ArrayList<>(); { TransferDetailInput transferDetailInput = new TransferDetailInput(); transferDetailInput.setOutDetailNo("x23zy545Bd5436"); transferDetailInput.setTransferAmount(200000L); transferDetailInput.setTransferRemark("2020年4月报销"); transferDetailInput.setOpenid("o-MYE42l80oelYMDE34nYD456Xoy"); transferDetailInput.setUserName( "757b340b45ebef5467rter35gf464344v3542sdf4t6re4tb4f54ty45t4yyry45"); transferDetailListList.add(transferDetailInput); } initiateBatchTransferRequest.setTransferDetailList( transferDetailListList); } initiateBatchTransferRequest.setTransferSceneId("1000"); InitiateBatchTransferResponse response = service.initiateBatchTransfer(initiateBatchTransferRequest); } }
#应答参数
-
out_batch_no必填【商家批次单号】 商户系统内部的商家批次单号,在商户系统内部唯一
-
batch_id必填【微信批次单号】 微信批次单号,微信商家转账系统返回的唯一标识
-
create_time必填【批次创建时间】 批次受理成功时返回,按照使用rfc3339所定义的格式,格式为YYYY-MM-DDThh:mm:ss+TIMEZONE
-
batch_status选填【批次状态】 ACCEPTED:已受理。批次已受理成功,若发起批量转账的30分钟后,转账批次单仍处于该状态,可能原因是商户账户余额不足等。商户可查询账户资金流水,若该笔转账批次单的扣款已经发生,则表示批次已经进入转账中,请再次查单确认
PROCESSING:转账中。已开始处理批次内的转账明细单
FINISHED:已完成。批次内的所有转账明细单都已处理完成
CLOSED:已关闭。可查询具体的批次关闭原因确认
应答示例
{ "out_batch_no" : "plfk2020042013", "batch_id" : "1030000071100999991182020050700019480001", "create_time" : "2015-05-20T13:29:35.120+08:00", "batch_status" : "ACCEPTED" }
#错误码
#公共错误码
状态码 | 错误码 | 描述 | 解决方案 |
---|---|---|---|
400 | PARAM_ERROR | 参数错误 | 请根据错误提示正确传入参数 |
400 | INVALID_REQUEST | HTTP 请求不符合微信支付 APIv3 接口规则 | 请参阅 接口规则(opens new window) |
401 | SIGN_ERROR | 验证不通过 | 请参阅 签名常见问题(opens new window) |
500 | SYSTEM_ERROR | 系统异常,请稍后重试 | 请稍后重试 |
#业务错误码
状态码 | 错误码 | 描述 | 解决方案 |
---|---|---|---|
400 | INVALID_REQUEST | 请求参数符合参数格式,但不符合业务规则 | 根据错误提示,传入正确参数 |
400 | INVALID_REQUEST | 创建订单冲突,请勿并发调用 | 根据错误提示调整调用策略 |
400 | INVALID_REQUEST | 对应单号已超出重试期,请查单确认后决定是否换单请求 | 根据错误提示调整调用策略 |
400 | INVALID_REQUEST | 此IP地址不允许调用该接口 | 请在商户平台-商家转账产品详情-转账发起方式-API发起-接口安全 中配置发起转账的IP地址 |
400 | INVALID_REQUEST | API通道未开启 | 请在商户平台-商家转账产品设置中配置API发起转账 |
400 | INVALID_REQUEST | 产品权限异常 | 请在商户平台-商家转账产品设置中开通产品权限 |
400 | INVALID_REQUEST | 超出商户单日转账额度,请核实产品设置是否准确 | 请在商户平台-商家转账产品设置中配置转账日限额 |
400 | INVALID_REQUEST | 你尚未获取该转账场景 | 请在商户平台-商家转账产品设置中申请该场景 |
400 | INVALID_REQUEST | 未配置收款用户列表 | 请前往商户平台-商家转账到零钱-转账场景中添加 |
400 | PARAM_ERROR | 参数错误 | 根据错误提示,传入正确参数 |
400 | PARAM_ERROR | 单批次明细笔数不合法,最高支持1000笔明细用 | 根据错误提示调整策略 |
401 | APPID_MCHID_NOT_MATCH | 商户号和appid没有绑定关系 | 商户号和appid没有绑定关系 |
403 | ACCOUNTERROR | 商户账户付款受限 | 可前往商户平台-违约记录获取解除功能限制指引 |
403 | NO_AUTH | 商户信息不合法 | 登录商户平台核对,传入正确信息 |
403 | NOT_ENOUGH | 资金不足 | 商户账户资金不足,请充值后原单重试,请勿更换商家转账批次单号 |
429 | FREQUENCY_LIMITED | 频率超限 | 该笔请求未受理,请降低频率后原单重试,请勿更换商家转账批次单号 |
500 | SYSTEM_ERROR | 系统错误 | 请勿更换商家转账批次单号,请使用相同参数再次调用API。否则可能造成资金损失 |
https://pay.weixin.qq.com/docs/merchant/apis/batch-transfer-to-balance/transfer-batch/initiate-batch-transfer.html
概述
更新时间:2023.04.28
#关于API v3
为了在保证支付安全 的前提下,带给商户简单、一致且易用 的开发体验,我们推出了全新的微信支付API v3。
相较于之前的微信支付API,主要区别是:
- 遵循统一的REST的设计风格
- 使用JSON作为数据交互的格式,不再使用XML
- 使用基于非对称密钥的SHA256-RSA的数字签名算法,不再使用MD5或HMAC-SHA256
- 使用第三方证书颁发机构颁发的证书。其中:
- 商户API证书,由商户申请。商户使用商户的私钥为请求报文生成签名。微信支付使用商户API证书验证签名,以验证商户的身份和数据的完整性。
- 微信支付平台证书,由微信支付申请。微信支付使用微信支付的私钥为应答和回调报文生成签名。商户使用微信支付平台证书验证签名,以验证微信支付的身份和数据的完整性。
- 使用AES-256-GCM,对回调中的关键信息进行加密保护
#SDK接入
我们提供了微信支付API v3官方SDK(目前包含Java (opens new window)、PHP (opens new window)、Go (opens new window)三种语言版本)。此外,我们也提供API v3的Postman调试工具、微信支付平台证书下载工具,你可以通过我们的GitHub (opens new window)获取。
我们建议商户基于微信支付官方提供的SDK来开发应用。SDK为商户的技术人员封装了请求的签名和应答的验签,简化了商户系统的开发工作。
#自行接入
在规则说明中,你将了解到微信支付API v3的基础约定,如数据格式、参数兼容性等。我们还重点介绍了微信支付API v3新的认证机制 (证书/密钥/签名)。你可以跟随着 开发指南,使用命令行或者你熟悉的编程语言,一步一步实践签名生成、签名验证、证书和回调报文解密和敏感信息加解密。在最后的常见问题中,我们总结了商户接入过程遇到的各种问题。
如果你有任何问题,欢迎访问我们的开发者社区 (opens new window)。
https://pay.weixin.qq.com/docs/merchant/development/interface-rules/introduction.html