微信企业支付到个人银行卡
最近公司开通了微信新增功能企业支付到银行卡的接口。做个记录必不可少,务必注意不同银行的银行编码有所区别。参考微信官方文档详细了解该接口的具体操作流程。由于调用API成功后,微信支付会出现失败的情况,并且不会告知具体原因。
public static void main(String[] args) throws Exception {
// TODO 生成器自动生成的方法 stub
String source =""; //卡片持有者姓名
String pank = ""; //信用卡号
//请注意 这里的 publicKeyPKCS8 是微信支付公钥经 openssl 转换为 PKCS8 格式的公钥 需要转换一次 详情见微信官方文档
String publicKeyPKCS8 = "";
通过调用 GetRSA.getRSA 方法计算得到 enc_true_name = GetRSA.getRSA(source,publicKeyPKCS8);
通过调用 GetRSA.getRSA 方法计算得到 enc_bank_no = GetRSA.getRSA(pank,publicKeyPKCS8);
//商户企业付款单号
String partner_trade_no = StringUtils.getStrRandom(28);
//随机字符串
String nonce_str1 = StringUtils.getStrRandom(28);
//获取签名
SortedMap<Object,Object> parameters1 = new TreeMap<Object,Object>();
parameters1.put("mch_id", WChatInfo.MCH_ID);
parameters1.put("partner_trade_no", partner_trade_no);
parameters1.put("nonce_str", nonce_str1);
parameters1.put("enc_bank_no", enc_bank_no);
parameters1.put("enc_true_name", enc_true_name);
parameters1.put("bank_code", bank_code);
parameters1.put("amount", amount);
parameters1.put("desc", desc);
String sign1 = SignUtils.creatSign(WChatInfo.CHARSET, parameters1);
//请求企业付款
TreeMap<String, String> tmap1 = new TreeMap<String, String>();
tmap1.put("mch_id", WChatInfo.MCH_ID);
tmap1.put("partner_trade_no", partner_trade_no);
tmap1.put("nonce_str", nonce_str1);
tmap1.put("enc_bank_no", enc_bank_no);
tmap1.put("enc_true_name", enc_true_name);
tmap1.put("bank_code", bank_code);
tmap1.put("amount", amount);
tmap1.put("desc", desc);
tmap1.put("sign", sign1);
String xml2 = XMLUtils.getRequestXml(tmap1);
XML字符串 xml3 = HttpClientCustomSSL.httpClientResultPANK(xml2);
将 XML字符串 xml3 传递给 parseXmlToMap 方法以生成 EnterpriceToCustomerByCard对象。
依据map中result_code与return_code的组合情况来评估程序运行结果并记录到指定位置
if ( ("SUCCESS".equalsIgnoreCase ( enterpriceToCustomerByCard.getResult_code() ))
&& ("SUCCESS".equalsIgnoreCase ( enterpriceToCustomerByCard.getReturn_code() )))
{
// 表示退款成功
// TODO:编写自己的逻辑
// TODO:更新自己的订单状态,并生成记录等
System.out.println ( enterpriceToCustomerByCard.getReturn_msg() );
}
else
{
// 表示退款失败
// TODO:调用服务的方法,并存储失败提现的记录
System.out.println ( enterpriceToCustomerByCard.getReturn_msg() );
System.out.println ( enterpriceToCustomerByCard.getErr_code_des() );
}
