您的位置:首页 > 移动开发 > 微信开发

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

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

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

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

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

请求参数:

字段名变量名必填示例值类型描述
公众账号appidmch_appidwx8888888888888888String微信分配的公众账号ID(企业号corpid即为此appId)
商户号mchid1900000109String(32)微信支付分配的商户号
设备号device_info013467007045764String(32)微信支付分配的终端设备号
随机字符串nonce_str5K8264ILTKCH16CQ2502SI8ZNMTM67VSString(32)随机字符串,不长于32位
签名signC380BEC2BFD727A4B6845133519F3AD6String(32)签名,详见签名算法
商户订单号partner_trade_no10000098201411111234567890String商户订单号,需保持唯一性
用户openidopenidoxTWIuGaIt6gTKsQRLau2M0yL16EString商户appid下,某用户的openid
校验用户姓名选项check_nameOPTION_CHECKStringNO_CHECK:不校验真实姓名

FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账)

OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)
收款用户姓名re_user_name可选马花花String收款用户真实姓名。

如果check_name设置为FORCE_CHECK或OPTION_CHECK,则必填用户真实姓名
金额amount10099int企业付款金额,单位为分
企业付款描述信息desc理赔String企业付款操作说明信息。必填。
Ip地址spbill_create_ip192.168.0.1String(32)调用接口的机器Ip地址
返回参数:

字段名变量名必填示例值类型描述
返回状态码return_codeSUCCESSString(16)SUCCESS/FAIL

此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
返回信息return_msg签名失败String(128)返回信息,如非空,为错误原因

签名失败

参数格式校验错误
以下字段在return_code为SUCCESS的时候有返回

字段名变量名必填示例值类型描述
商户appidmch_appidwx8888888888888888String微信分配的公众账号ID(企业号corpid即为此appId)
商户号mchid1900000109String(32)微信支付分配的商户号
设备号device_info013467007045764String(32)微信支付分配的终端设备号,
随机字符串nonce_str5K8264ILTKCH16CQ2502SI8ZNMTM67VSString(32)随机字符串,不长于32位
业务结果result_codeSUCCESSString(16)SUCCESS/FAIL
错误代码err_codeSYSTEMERRORString(32)错误码信息
错误代码描述err_code_des系统错误String(128)结果信息描述
以下字段在return_code 和result_code都为SUCCESS的时候有返回

字段名变量名必填示例值类型描述
商户订单号partner_trade_no1217752501201407033233368018String(32)商户订单号,需保持唯一性
微信订单号payment_no1007752501201407033233368018String企业付款成功,返回的微信订单号
微信支付成功时间payment_time2015-05-19 15:26:59String企业付款成功时间
错误代码:转账失败的时候会返回错误代码,我们可以根据这些代码判断具体出错的内容

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

XML_ERRORPost内容出错Post请求数据不是合法的xml格式内容修改post的内容
FATAL_ERROR两次请求参数不一致两次请求商户单号一样,但是参数不一致如果想重试前一次的请求,请用原参数重试,如果重新发送,请更换单号。
CA_ERROR证书出错请求没带证书或者带上了错误的证书到商户平台下载证书
请求的时候带上该证书

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

下面的文章会在本文理论的基础上进行具体的代码实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: