微信企业转账实例之理论介绍

最近在搞公司的电商项目时,客户要求加上一个微信转账的功能。由于项目中并没有对应的插件,没法,只有现学现用。我先去微信商户平台官网上读取各种文档,最终做了一个demo。最后集成到了公司的项目中,大功告成。下面,我就一步一步的带大家来了解这个微信转账功能并公布自己的demo源码。

企业转账:提供企业向用户付款的功能,支持企业通过API接口付款至目标用户(企业可根据APPID+OpenID锁定目标用户)。针对已实名认证的用户,微信支付可提供校验真实姓名一致性的可选功能。付款资金将进入目标用户的零钱(微信-我-钱包-零钱)。微信支付将做零钱入账消息通知,零钱收支明细会展示相应记录。

API接口:https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers

cert证书:需要下载证书 证书使用

请求参数:

字段名 变量名 必填 示例值 类型 描述
公众账号appid mch_appid wx8888888888888888 String 微信分配的公众账号ID(企业号corpid即为此appId)
商户号 mchid 1900000109 String(32) 微信支付分配的商户号
设备号 device_info 013467007045764 String(32) 微信支付分配的终端设备号
随机字符串 nonce_str 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 随机字符串,不长于32位
签名 sign C380BEC2BFD727A4B6845133519F3AD6 String(32) 签名,详见签名算法
商户订单号 partner_trade_no 10000098201411111234567890 String 商户订单号,需保持唯一性
用户openid openid oxTWIuGaIt6gTKsQRLau2M0yL16E String 商户appid下,某用户的openid
校验用户姓名选项 check_name OPTION_CHECK String NO_CHECK:不校验真实姓名
FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账)
OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)
收款用户姓名 re_user_name 可选 马花花 String 收款用户真实姓名。
如果check_name设置为FORCE_CHECK或OPTION_CHECK,则必填用户真实姓名
金额 amount 10099 int 企业付款金额,单位为分
企业付款描述信息 desc 理赔 String 企业付款操作说明信息。必填。
Ip地址 spbill_create_ip 192.168.0.1 String(32) 调用接口的机器Ip地址

返回参数:

字段名 变量名 必填 示例值 类型 描述
返回状态码 return_code SUCCESS String(16) SUCCESS/FAIL
此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
返回信息 return_msg 签名失败 String(128) 返回信息,如非空,为错误原因
签名失败
参数格式校验错误

以下字段在return_code为SUCCESS的时候有返回

字段名 变量名 必填 示例值 类型 描述
商户appid mch_appid wx8888888888888888 String 微信分配的公众账号ID(企业号corpid即为此appId)
商户号 mchid 1900000109 String(32) 微信支付分配的商户号
设备号 device_info 013467007045764 String(32) 微信支付分配的终端设备号,
随机字符串 nonce_str 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 随机字符串,不长于32位
业务结果 result_code SUCCESS String(16) SUCCESS/FAIL
错误代码 err_code SYSTEMERROR String(32) 错误码信息
错误代码描述 err_code_des 系统错误 String(128) 结果信息描述

以下字段在return_code 和result_code都为SUCCESS的时候有返回


错误代码:转账失败的时候会返回错误代码,我们可以根据这些代码判断具体出错的内容

错误代码 描述 原因 解决方案
NOAUTH 没有权限 没有授权请求此api 请联系微信支付开通api权限
AMOUNT_LIMIT 付款金额不能小于最低限额 付款金额不能小于最低限额 每次付款金额必须大于1元
PARAM_ERROR 参数错误 参数缺失,或参数格式出错,参数不合法等 请查看err_code_des,修改设置错误的参数
OPENID_ERROR Openid错误 Openid格式错误或者不属于商家公众账号 请核对商户自身公众号appid和用户在此公众号下的openid。
NOTENOUGH 余额不足 帐号余额不足 请用户充值或更换支付卡后再支付
SYSTEMERROR 系统繁忙,请稍后再试。 系统错误,请重试 使用原单号以及原请求参数重试
NAME_MISMATCH 姓名校验出错 请求参数里填写了需要检验姓名,但是输入了错误的姓名 填写正确的用户姓名
SIGN_ERROR 签名错误 没有按照文档要求进行签名
  1. 签名前没有按照要求进行排序。
  2. 没有使用商户平台设置的密钥进行签名
  3. 参数有空格或者进行了encode后进行签名。
XML_ERROR Post内容出错 Post请求数据不是合法的xml格式内容 修改post的内容
FATAL_ERROR 两次请求参数不一致 两次请求商户单号一样,但是参数不一致 如果想重试前一次的请求,请用原参数重试,如果重新发送,请更换单号。
CA_ERROR 证书出错 请求没带证书或者带上了错误的证书
  1. 到商户平台下载证书
  2. 请求的时候带上该证书 

OK,理论知识其实并没有多少。简单点来说就是我们向指定的API地址post数据,再根据返回的数据进行下一步的判断。

下面的文章会在本文理论的基础上进行具体的代码实现。

你可能感兴趣的:(ECMall,PHP)