微信支付之企业付款

概述提供企业向用户支付的功能,支持企业通过API接口付款,或通过微信支付商户平台网页功能操作付款。

企业付款有两种方式

1. 企业支付零钱

2. 企业向银行付款

开通条件:

   1. 商户号已入驻90日

   2. 商户连续30天正常交易

   3. 登录微信支付商平台-开设企业支付的产品中心。

付款前需充值:

在调用API接口付款或通过微信支付商户平台网页功能操作付款前,需要登录微信支付商户平台,通过网页充值功能充值(商户平台-交易中心)

详情请参考官方文件

下面介绍一下如何通过API接口付款

证书下载

参照安全规范-3.商户证书

下载:微信商户平台(http://pay.weixin.qq.com)–>账户中心–>账户设置–>API安全–>证书下载

企业支付零钱

需要支付到零钱openId如何获取openId那呢?参考授权获取用户信息?

IJPay中的接口

https://github.com/Javen205/IJPay

https://gitee.com/Javen205/IJPay

企业付款到零钱到企业付款 ** * * @param params * 请求参数 * @param certPath * * @param certPassword * * @return {String} */ public static String transfers(Map<String,String> params,String certPath,String certPassword) { return WxPayApi.doPostSSL(TRANSFERS_URL,params,certPath,certPassword); } /** * * @param params * 请求参数 * @param certPath * * @param certPassword * * @return {String} */ public static String getTransferInfo(Map<String,String> params,String certPath,String certPassword) { return WxPayApi.doPostSSL(GETTRANSFERINFO_URL,params,certPath,certPassword); }

代码示例 ** * */ public void transfers()String openId = getSessionAttr("openId"); Map<String,String> params = new HashMap<String,String>(); params.put("mch_appid",appid); params.put("mchid",mch_id); String nonceStr = String.valueOf(System.currentTimeMillis();params.put("nonce_str",nonceStr); String partnerTradeNo = String.valueOf(System.currentTimeMillis();params.put("partner_trade_no",partnerTradeNo); params.put("openid",openId); params.put("check_name","NO_CHECK"); params.put("amount","100"); params.put("desc","IJPay提现测试-By Javen"); String ip = IpKit.getRealIp(getRequest();if (StrKit.isBlank(ip)) { ip = "127.0.0.1"; } params.put("spbill_create_ip",ip); params.put("sign",PaymentKit.createSign(params,partnerKey));System.out.println("certPath>" certPath);|String transfers = WxPayApi.transfers(params,certPath,mch_id);log.info("提现结果:" transfers); System.out.println("提现结果:" transfers); Map<String,String> ** p = PaymentKit.xmlToMap(transfers); String return_code = ** p.get("return_code"); String result_code = null; if (("SUCCESS").equals(return_code)) { result_code = ** p.get("result_code"); if (("SUCCESS").equals(result_code))●else」renderText(transfers); } /** * */ public void transferInfo()try { String partner_trade_no = getPara("partner_trade_no"); Map<String,String> params = new HashMap<String,String>();params.put("nonce_str",System.currentTimeMillis() ""); params.put("partner_trade_no",partner_trade_no); params.put("mch_id",mch_id); params.put("appid",appid); params.put("sign",PaymentKit.createSign(params,partnerKey)); String transferInfo = WxPayApi.getTransferInfo(params ,certPath,mch_id); renderText(transferInfo); } catch (Exception e) { e.printStackTrace();renderText(e.getMessage」** 用户名需要使用RSA默认输出算法加密接口PKCS#1格式公钥,Java RSA加密需要使用PKCS#8 否则会出现异常algid parse error,not a sequence [官方文件]([微信支付]企业支付开发者文件)

<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg><result_code><![CDATA[SUCCESS]]></result_code><mch_id><![CDATA[1262075601]]></mch_id><pub_key><![CDATA[-----BEGIN RSA PUBLIC KEY-----MIIBCgKCAQEA6Bl76IwSvBTiibZ CNRUA6BfahMshZ0WJpHD1GpmvcQjeN6Yrv6c9eIl6gB4nU3isN7bn LmoVTpH1gHViaV2YyG/zXj4z4h7r V ezesMqqorEg38BCNUHNmhnw4/C0I4gBAQ4x0SJOGnfKGZKR9yzvbkJtvEn732JcEZCbdTZ ** xkwlenXvM mStcJaxBCB/h5xJ5VOF5nDbTPzLphIpzddr3zx/Jxjna9QB1v/YSKYXn iuwruNUXGCvvxBWaBGKrjOdRTRy9adWOgNmtuYDQJ2YOfG8PtPe06ELKjmr2CfaAGrKKUroyaGvy3qx ** 0PlT UQ4ADSXWt/zl0o5wIDAQAB-----END RSA PUBLIC KEY-----]]></pub_key></xml>将获取到的`pub_key`保存到文件` public.pem`

-----BEGIN RSA PUBLIC KEY-----MIIBCgKCAQEA6Bl76IwSvBTiibZ CNRUA6BfahMshZ0WJpHD1GpmvcQjeN6Yrv6c9eIl6gB4nU3isN7bn LmoVTpH1gHViaV2YyG/zXj4z4h7r V ezesMqqorEg38BCNUHNmhnw4/C0I4gBAQ4x0SJOGnfKGZKR9yzvbkJtvEn732JcEZCbdTZ ** xkwlenXvM mStcJaxBCB/h5xJ5VOF5nDbTPzLphIpzddr3zx/Jxjna9QB1v/YSKYXn iuwruNUXGCvvxBWaBGKrjOdRTRy9adWOgNmtuYDQJ2YOfG8PtPe06ELKjmr2CfaAGrKKUroyaGvy3qx ** 0PlT UQ4ADSXWt/zl0o5wIDAQAB-----END RSA PUBLIC KEY-----PKCS#1公钥格式转换PKCS#8格式的公钥

IJPay接口企业付款到银行卡查询企业付款到银行卡RSA加密公钥/** * * @param params * * @param certPath * * @param certPassword * * @return {String} */ public static String payBank(Map<String,String> params,String certPath,String certPassword) { return WxPayApi.doPostSSL(PAY_BANK_URL, params, certPath, certPassword); } /** * 查询企业付款到银行 * @param params * 请求参数 * @param certPath * 证书文件目录 * @param certPassword * 证书密码 * @return {String} */ public static String queryBank(Map<String, String> params, String certPath, String certPassword) { return WxPayApi.doPostSSL(QUERY_BANK_URL, params, certPath, certPassword); } /** * 获取RSA加密公钥 * @param params * 请求参数 * @param certPath * 证书文件目录 * @param certPassword * 证书密码 * @return {String} */ public static String getPublicKey(Map<String, String> params, String certPath, String certPassword) { return WxPayApi.doPostSSL(GETPUBLICKEY_URL, params, certPath, certPassword); }

示例代码/** * 获取RSA加密公钥 * 接口默认输出PKCS#1格式的公钥,商户需根据自己开发的语言选择公钥格式 * Java RSA加密需要使用PKCS#8 不然会出现异常algid parse error, not a sequence * PKCS#1 转 PKCS#8: * openssl rsa -RSAPublicKey_in -in <filename> -pubout */ public void getPublicKey(){ try { Map<String, String> params = new HashMap<String, String>(); params.put("mch_id", mch_id); params.put("nonce_str", String.valueOf(System.currentTimeMillis())); params.put("sign_type", "MD5"); String createSign = PaymentKit.createSign(params, partnerKey); params.put("sign", createSign); String publicKeyStr = WxPayApi.getPublicKey(params , certPath, mch_id); renderText(publicKeyStr); } catch (Exception e) { e.printStackTrace(); renderText(e.getMessage()); } } /** * 企业付款到银行卡 */ public void payBank() { try { //假设获取到的RSA加密公钥为PUBLIC_KEY(PKCS#8格式) final String PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6Bl76IwSvBTiibZ+CNRUA6BfahMshZ0WJpHD1GpmvcQjeN6Yrv6c9eIl6gB4nU3isN7bn+LmoVTpH1gHViaV2YyG/zXj4z4h7r+V+ezesMqqorEg38BCNUHNmhnw4/C0I4gBAQ4x0SJOGnfKGZKR9yzvbkJtvEn732JcEZCbdTZ ** xkwlenXvM+mStcJaxBCB/h5xJ5VOF5nDbTPzLphIpzddr3zx/Jxjna9QB1v/YSKYXn+iuwruNUXGCvvxBWaBGKrjOdRTRy9adWOgNmtuYDQJ2YOfG8PtPe06ELKjmr2CfaAGrKKUroyaGvy3qx ** 0PlT+UQ4ADSXWt/zl0o5wIDAQAB"; Map<String, String> params = new HashMap<String, String>(); params.put("mch_id", mch_id); params.put("partner_trade_no", System.currentTimeMillis()+""); params.put("nonce_str", System.currentTimeMillis()+""); params.put("enc_bank_no", RSAUtils.encryptByPublicKeyByWx("6214837805417833", PUBLIC_KEY));//收款方银行 ** params.put("enc_true_name", RSAUtils.encryptByPublicKeyByWx("周业文", PUBLIC_KEY));//收款方用户名 params.put("bank_code", "1001");//收款方开户行 params.put("amount", "1"); params.put("desc", "IJPay 测试付款到银行卡-By Javen"); params.put("sign", PaymentKit.createSign(params, partnerKey)); String payBank = WxPayApi.payBank(params , certPath, mch_id); renderText(payBank); } catch (Exception e) { e.printStackTrace(); renderText(e.getMessage()); } } /** * 查询企业付款到银行 */ public void queryBank() { try { String partner_trade_no = getPara("partner_trade_no"); Map<String, String> params = new HashMap<String, String>(); params.put("mch_id", mch_id); params.put("partner_trade_no", partner_trade_no); params.put("nonce_str", System.currentTimeMillis()+""); params.put("sign", PaymentKit.createSign(params, partnerKey)); String queryBank = WxPayApi.queryBank(params, certPath, mch_id); renderText(queryBank); } catch (Exception e) { e.printStackTrace(); renderText(e.getMessage()); } }

让支付触手可及 - CSDN博客

IJPay · GitBook

如有疑问欢迎留言交流讨论

私域操盘咨询

免费获取私域运营资料

申请免费使用

在线咨询