企业付款到零钱API开发~~~付款到微信
更多精彩⽂章请关注微信公众号:Java编程指南
近⽇,在开发“微信企业付款到零钱”的功能。之前有过微信开发的经验,但是第⼀次接触“付款到零钱“这⼀块的业务,查询了很多的博客资料以及⾛了很多的弯路。也发现“企业付款到零钱”分享的博客并不多。特地写了该博客,希望对你们有帮助。个⼈浅薄的见解
代码下载地址如下:
链接:
提取码:weft
中石油托福成绩查询【稍微提⼀下:】上⼀篇博客分享了“企业付款到银⾏卡API~~”⽂章,有位博友留⾔了,遇到了“产品权限验证失败 请查看您当前是否具有该产品的权限”。这是因为没有在微信商务后台开通对应的功能。API⾥⾯已经明确提⽰了。这⾥我是建议:⼤家⼀定要先去看⽂档,看完再来看这篇⽂章。⽂档也就三四页⽽已,也就20分钟
⼀、企业付款到零钱API
建议还是看看:
⼆、开发准备
(1)证书的准备:java开发需要⽤到:apiclient_cert.p12证书的,在微信商户平台(pay.)–>账户设置–>API安全–>证书中下载的 。
【何时⽤到证书?】与⽀付不⼀样,企业⽀付功能在发送post请求的时候,需要加载⾃⼰的⼀个证书之后,带着证书去请求退款才可以。这⾥使⽤到证书–很多⼈不知道证书在哪⾥使⽤
(2)了解好数字签名 — 简单来解释,就是对⾃⼰要发送的数据进⾏加密处理、换句话说假如说你要传递A/B/C,就对这三者进⾏加密。初开发者的误区:不知道该加密什么数据、观看⽹上的博客胡乱进⾏签名,导致签名错误
【温馨提⽰:】数字签名是⼀般开发⼈员容易遇到的错误,记住“你没遇到数字签名错误,都不好意思说⾃⼰做过微信退款⽀付订单查询等功能”。 签名⼯具类见:我这⾥就不贴出来了
blog.csdn/xiaozhegaa/article/details/79127283
耐⼼解决就⾏
(3) xml到map、map到xml转化、发送Post请求、签名等操作。具体见下篇⽂章。⽅法和类都分享出来了,copy即可
blog.csdn/xiaozhegaa/article/details/79127283
三、API截图解释布兰妮经典歌曲mv
~~ 开通条件:
~ 接⼝说明 + 是否需要证书
~ 证书说明 java开发只需要:apiclient_cert.p12
四、开发步骤如下
1、拼凑所需要传递的参数 map集合
2、根据要传递的参数⽣成⾃⼰的签名
3、把签名放到map集合中【因为签名也要传递过去,看API】
4、将当前的map结合转化成xml格式
5、发送请求到企业付款到零钱的Api。发送请求是⼀个⽅法来的POST
6、解析返回的xml数据===》map集合
7、根据map中的result_code AND return_code来判断是否成功与失败
不得不再啰嗦⼀下。下⾯设计到签名、mapToXml转化、xmlToMap转化、发送请求到API。这些⽅法都可以在下⾯⽹址看到。这⾥我Xml 转化成Map。我是习惯⽤⼀个Bean接收,也有范例的代码,⼤家模仿能⼒要强⼀点。这次贴出来给⼤家看看吧
blog.csdn/xiaozhegaa/article/details/79127283
@SuppressWarnings("unchecked")
public static EnterpriceToCustomer parXmlToMapEnterpriceToCustomer(String xml){
EnterpriceToCustomer enterpriceToCustomer = new EnterpriceToCustomer();
try {
StringReader read = new StringReader(xml);
// 创建新的输⼊源SAX 解析器将使⽤ InputSource 对象来确定如何读取 XML 输⼊
InputSource source = new InputSource(read);
// 创建⼀个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
// 通过输⼊源构造⼀个Document
Document doc;
doc = (Document) sb.build(source);
Element root = RootElement();// 指向根节点
List<Element> list = Children();
if(list!=null&&list.size()>0){
for (Element element : list) {
System.out.println("key是:"+Name()+",值是:"+Text());
if("return_code".Name())){
enterpriceToCustomer.tReturn_Text());
}
if("return_msg".Name())){
enterpriceToCustomer.tReturn_Text());苯乙肼
}
if("mchid".Name())){
贼首
enterpriceToCustomer.Text());
}
if("nonce_str".Name())){
分担忧愁enterpriceToCustomer.tNonce_Text());
至于英语}
if("result_code".Name())){
enterpriceToCustomer.tResult_Text());
}
if("partner_trade_no".Name())){
商检费
enterpriceToCustomer.tPartner_trade_Text());
}
if("payment_no".Name())){
enterpriceToCustomer.tPayment_Text());
}
if("payment_time".Name())){
enterpriceToCustomer.tPayment_Text());
}
//错误的编码
/*
private String err_code;
private String err_code_des;
* */
if("err_code".Name())){
enterpriceToCustomer.tErr_Text());
}
if("err_code_des".Name())){
enterpriceToCustomer.tErr_code_Text());
}
}
}
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
return enterpriceToCustomer;
}
@Test
public void OldBook(){
英语教育论文//1.0 拼凑企业⽀付需要的参数
String appid = wxconfig.AppID; //微信公众号的appid
schemesString mch_id = h_id; //商户号
String nonce_str = RandomStringByLength(32); //⽣成随机数
String partner_trade_no = RandomStringByLength(32); //⽣成商户订单号
String openid = "oYiAh0ypHoaYFoVFhAsnv1aJ****"; // ⽀付给⽤户openid
String check_name = "NO_CHECK"; //是否验证真实姓名呢
在线课堂免费String re_ur_name = "⼩郑"; //收款⽤户姓名
String amount = "100"; //企业付款⾦额,单位为分
String desc = "测试开发,稍后会还给公司的"; //企业付款操作说明信息。必填。
String spbill_create_ip = "192.168.**.****; //
//2.0 ⽣成map集合
SortedMap<Object, Object> packageParams = new TreeMap<Object, Object>();
packageParams.put("mch_appid", appid); //微信公众号的appid
packageParams.put("mchid", mch_id); //商务号
packageParams.put("nonce_str",nonce_str); //随机⽣成后数字,保证安全性
packageParams.put("partner_trade_no",partner_trade_no); //⽣成商户订单号
packageParams.put("openid",openid); // ⽀付给⽤户openid
packageParams.put("check_name",check_name); //是否验证真实姓名呢
packageParams.put("re_ur_name",re_ur_name);//收款⽤户姓名
packageParams.put("amount",amount); //企业付款⾦额,单位为分
packageParams.put("desc",desc); //企业付款操作说明信息。必填。
packageParams.put("spbill_create_ip",spbill_create_ip); //调⽤接⼝的机器Ip地址
//3.0 ⽣成⾃⼰的签名
String sign = ateSign("utf-8",packageParams);
//4.0 封装退款对象
packageParams.put("sign", sign);
//5.0将当前的map结合转化成xml格式
String reuqestXml = RequestXml(packageParams);
/
/6.0获取需要发送的url地址
String wxUrl = "h./mmpaymkttransfers/promotion/transfers"; //获取退款的api接⼝