微信小程序> 关于微信企业付款到零钱

关于微信企业付款到零钱

浏览量:1648 时间: 来源:谱写

近日,在开发“微信企业付款到零钱”的功能。之前有过微信开发的经验,但是第一次接触“付款到零钱“这一块的业务,查询了很多的博客资料以及走了很多的弯路。也发现“企业付款到零钱”分享的博客并不多。特地写了该博客,希望对你们有帮助。个人浅薄的见解



【稍微提一下:】上一篇博客分享了“企业付款到银行卡API~~”文章,有位博友留言了,遇到了“产品权限验证失败 请查看您当前是否具有该产品的权限”。这是因为没有在微信商务后台开通对应的功能。API里面已经明确提示了。这里我是建议:大家一定要先去看文档,看完再来看这篇文章。文档也就三四页而已,也就20分钟

一、企业付款到零钱API
https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1
【建议还是看看】

二、开发准备
(1)证书的准备:java开发需要用到:apiclient_cert.p12证书的,在微信商户平台(pay.weixin.qq.com)–账户设置–API安全–证书中下载的 。


【何时用到证书?】与支付不一样,企业支付功能在发送post请求的时候,需要加载自己的一个证书之后,带着证书去请求退款才可以。这里使用到证书–很多人不知道证书在哪里使用
(2)了解好数字签名 — 简单来解释,就是对自己要发送的数据进行加密处理、换句话说假如说你要传递A/B/C,就对这三者进行加密。初开发者的误区:不知道该加密什么数据、观看网上的博客胡乱进行签名,导致签名错误
【温馨提示:】数字签名是一般开发人员容易遇到的错误,记住“你没遇到数字签名错误,都不好意思说自己做过微信退款支付订单查询等功能”。 签名工具类见:我这里就不贴出来了
耐心解决就行

 

三、API截图解释
~~ 开通条件:

~ 接口说明 + 是否需要证书

~ 证书说明 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来判断是否成功与失败
 

@SuppressWarnings("unchecked")     public static EnterpriceToCustomer parseXmlToMapEnterpriceToCustomer(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 = doc.getRootElement();// 指向根节点                     ListElement list = root.getChildren();                     if(list!=null&&list.size()0){                     for (Element element : list) {                         System.out.println("key是:"+element.getName()+",值是:"+element.getText());                         if("return_code".equals(element.getName())){                                 enterpriceToCustomer.setReturn_code(element.getText());                             }                         if("return_msg".equals(element.getName())){                                 enterpriceToCustomer.setReturn_msg(element.getText());                             }                         if("mchid".equals(element.getName())){                             enterpriceToCustomer.setMchid(element.getText());                         }                        if("nonce_str".equals(element.getName())){                             enterpriceToCustomer.setNonce_str(element.getText());                         }                        if("result_code".equals(element.getName())){                             enterpriceToCustomer.setResult_code(element.getText());                         }                        if("partner_trade_no".equals(element.getName())){                             enterpriceToCustomer.setPartner_trade_no(element.getText());                         }                        if("payment_no".equals(element.getName())){                             enterpriceToCustomer.setPayment_no(element.getText());                         }                        if("payment_time".equals(element.getName())){                             enterpriceToCustomer.setPayment_time(element.getText());                         }                           //错误的编码                        /*                           private String err_code;                           private String err_code_des;                         * */                        if("err_code".equals(element.getName())){                             enterpriceToCustomer.setErr_code(element.getText());                         }                        if("err_code_des".equals(element.getName())){                             enterpriceToCustomer.setErr_code_des(element.getText());                         }                       }                }            } 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        String mch_id = wxconfig.mch_id; //商户号        String nonce_str = RandomStringGenerator.getRandomStringByLength(32); //生成随机数        String partner_trade_no =  RandomStringGenerator.getRandomStringByLength(32); //生成商户订单号        String openid = "oYiAh0ypHoaYFoVFhAsnv1aJ****"; // 支付给用户openid        String check_name = "NO_CHECK"; //是否验证真实姓名呢        String re_user_name = "小郑";   //收款用户姓名        String amount = "100";              //企业付款金额,单位为分        String desc = "测试开发,稍后会还给公司的";   //企业付款操作说明信息。必填。        String spbill_create_ip = "192.168.**.****;     //        //2.0 生成map集合        SortedMapObject, Object packageParams = new TreeMapObject, 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_user_name",re_user_name);//收款用户姓名        packageParams.put("amount",amount);            //企业付款金额,单位为分        packageParams.put("desc",desc);                //企业付款操作说明信息。必填。        packageParams.put("spbill_create_ip",spbill_create_ip); //调用接口的机器Ip地址        //3.0 生成自己的签名        String sign  = WeixinPayBack.createSign("utf-8",packageParams);        //4.0 封装退款对象        packageParams.put("sign", sign);        //5.0将当前的map结合转化成xml格式        String reuqestXml = WXPayUtil.getRequestXml(packageParams);        //6.0获取需要发送的url地址        String wxUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; //获取退款的api接口        try {            String weixinPost = ClientCustomSSL.doRefund(wxUrl, reuqestXml).toString();            //7.0 解析返回的xml数据            com.fh.entity.nrb.xiaozheng.EnterpriceToCustomer refundResult = WeixinPayBack.parseXmlToMapEnterpriceToCustomer(weixinPost);            if("SUCCESS".equalsIgnoreCase(refundResult.getResult_code()) && "SUCCESS".equalsIgnoreCase(refundResult.getReturn_code())){                //8表示退款成功                //TODO 执行成功付款后的业务逻辑                //return successPayMoneyByBankCard(submitMoney,cmms_amt,enterpriceToCustomerByCard,applyId,companyId);            }else{                //9 表示退款失败                //TODO 调用service的方法 ,存储失败提现的记录咯                //failToPayMoneyByBankCard(enterpriceToCustomerByCard,applyId);            }        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }

五、结果演示

自此,我们就学会了“企业付款到个人零钱”的开发,希望对你们有帮助
具体的、在调用改方法自己加上自己的业务逻辑就行了。希望对大家有帮助

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎