企业微信付款到零钱,全代码讲解,包含怎么加入商户证书
个人对于企业微信付款到零钱的一些理解与说明,含代码
前段时间因公司业务需求,需要开发一个企业微信直接付款到用户微信账户的功能,然后就去微信官方文档看了一下,点击进入微信企业支付官方文档
没什么特别的地方,也算是一个普通的接口,不过除了代码外,需要特别注意的地方就是调用这个接口需要微信商户端的证书,这是微信官方对商户证书描述的文档
需要注意的有三步:
1.对参数进行排序并拼接
2.对拼接出来的字符串进行签名
3.调用接口时带上证书
接下来直接上代码
/**
*所需要传入的参数就是要付款的金额
*/
public String pay(double amount, HttpServletRequest request) throws Exception {String ip=request.getRemoteAddr();int money=new Double(amount*100).intValue();//生成随机字符串String nonceStr=RandomGenerator.getRandomString();Map<String,String> map=new HashMap<>(10);map.put("amount",String.valueOf(money));//如果需要校验收款方的姓名则将check_name改为FORCE_CHECK,//NO_CHECK可以不传入re_user_name,如果是FORCE_CHECK则必须传入map.put("check_name","NO_CHECK");map.put("desc","卖家余额提现");map.put("mch_appid",wechatAccountConfig.getMpAppId());map.put("mchid",wechatAccountConfig.getMchId());map.put("nonce_str",nonceStr);//各位从自己的系统中获取所要付款的用户的openidmap.put("openid",openid);//付款到用户也算是一笔订单嘛,因此我传入的是付款记录的orderId,需要改动map.put("partner_trade_no",orderId);map.put("spbill_create_ip",ip);//这一步完成了参数的排序及拼接,PayUtil工具类源码在下面String preStr= PayUtil.createLinkString(map);//这一步是最重要的对参数进行签名,微信根据这个进行校验String sign=PayUtil.sign(preStr,wechatAccountConfig.getMchKey(),"utf-8");//这一步构造调用接口需要的数据形式,因为该接口需要xml格式的数据String postXml="<xml>\n" +"<mch_appid>"+wechatAccountConfig.getMpAppId()+"</mch_appid>\n" +"<mchid>"+wechatAccountConfig.getMchId()+"</mchid>\n" +"<nonce_str>"+nonceStr+"</nonce_str>\n" +"<partner_trade_no>"+outDetail.getOrderId()+"</partner_trade_no>\n" +"<openid>"+seller.getOpenid()+"</openid>\n" +"<check_name>NO_CHECK</check_name>\n" +"<re_user_name></re_user_name>\n" +"<amount>"+money+"</amount>\n" +"<desc>卖家余额提现</desc>\n" +"<spbill_create_ip>"+ip+"</spbill_create_ip>\n" +"<sign>"+sign+"</sign>\n" +"</xml>";log.info("开始调用微信企业付款到零钱的接口:"+postXml);//这一步是最重要的,因为在调用付款接口的时候不仅仅需要传数据过去,还要带上证书,最开始我弄得时候在这里出错了好几次String res=PayUtil.HttpRequestForEnterprise(PAY_URL,"POST",postXml);log.info("调用完成,返回数据"+res);Map resMap=PayUtil.doXMLParse(res);System.out.println(resMap.get("return_code"));//如果调用失败,则需要将数据改动回退if(resMap.get("result_code").equals("SUCCESS")){//更改提现订单的状态//根据自身业务需求进行改动}return "";}
二.这个是我调用付款接口的时候使用到的工具类,主要就是三个方法,都有对于网上一些朋友的代码的参考
1.完成参数的排序与拼接
public static String createLinkString(Map<String, String> params) {List<String> keys = new ArrayList<String>(params.keySet());Collections.sort(keys);String prestr = "";for (int i = 0; i < keys.size(); i++) {String key = keys.get(i);String value = params.get(key);if (i == keys.size() - 1) {// 拼接时,不包括最后一个&字符prestr = prestr + key + "=" + value;} else {prestr = prestr + key + "=" + value + "&";}}return prestr;}
2.对数据进行签名
text就是所需签名的原数据,key是商户密钥
public static String sign(String text, String key, String input_charset) {text = text + "&key=" + key;return DigestUtils.md5Hex(getContentBytes(text, input_charset));}
3.这里主要是在将之前构造好的数据传入来调用微信付款的接口,并带上证书,切记证书一定一定不能忘记
public static String HttpRequestForEnterprise(String url,String outputStr) throws Exception {//这里填入商户证书的密码,即商户号String PKCS12 = "";//证书地址String fileRoute = "";//指定读取证书格式为PKCS12KeyStore keyStore = KeyStore.getInstance("PKCS12");//读取本机存放的PKCS12证书文件FileInputStream instream = new FileInputStream(new File(fileRoute));try {//指定PKCS12的密码keyStore.load(instream, PKCS12.toCharArray());} finally {instream.close();}//指定TLS版本SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, PKCS12.toCharArray()).build();//设置httpclient的SSLSocketFactorySSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext,new String[]{"TLSv1"},null,SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();StringBuffer stringBuffer = new StringBuffer();try {HttpPost httpPost = new HttpPost(url);InputStream is = new ByteArrayInputStream(outputStr.getBytes("UTF-8"));//InputStreamEntity严格是对内容和长度相匹配的。用法和BasicHttpEntity类似InputStreamEntity inputStreamEntity = new InputStreamEntity(is, is.available());httpPost.setEntity(inputStreamEntity);CloseableHttpResponse response = httpclient.execute(httpPost);try {HttpEntity entity = response.getEntity();BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));String inputLine;while ((inputLine = reader.readLine()) != null) {stringBuffer.append(inputLine);}} finally {response.close();}} finally {httpclient.close();}return stringBuffer.toString();}
以上.希望能帮到大家
如果我有讲的不好的地方,或者大家有不理解的,都可以私信或者评论我,一定回复
企业微信付款到零钱,全代码讲解,包含怎么加入商户证书相关推荐
- php企业微信付款到零钱,企业付款到零钱功能介绍及常见问题
Q:为什么我在[产品中心]找不到[企业付款到零钱]产品? A:需同时满足三个条件,才能看到开通入口: 1)入驻满足90天: 2)截止今日往回推30天有连续不间断的交易: 3)交易需为正常的健康交易. ...
- 金蝶云星空对接企业微信 - 付款单
与财务单据对接.业务单据对接不同,易对接的审批流对接产品是指:业务单据在业务系统中生成,推送企业微信进行审批流程处理,然后返回审批结果到业务系统. 本文中的设计原型简单介绍:在金蝶云星空K3 Clou ...
- 企业微信如何简单实现定时发送文件到群:企业微信群机器人操作(Java代码实现)
前言 不知道小伙伴们的公司组织架构通勤用的啥软件,我公司用的企业微信.然后业务销售部那边需要每天统计销售数据报表然后发在群里(我是开发,我不配在群里).知道这个背景以后,产品给我们的需求是:直接统计数 ...
- 做不好这一点,企业微信运营可能要全“白搭”!【企业微信增长神器Vol.1】
搞客户池运营,最头疼的环节可能不是怎么加人,而是加了几千几万人之后如何有效地管理. 关于好友管理,我们可以给企业微信上的客户手动打上标签,但这样做实在耗时间,如果能更简单点该多好-- 我们同时在销售防 ...
- 微信企业支付发送到零钱
微信企业支付发送到零钱 企业微信付款到零钱,是微信提供的一个支付接口. 一下是代码的具体实现 前置条件 已开通微信应用(服务号或者小程序),主要用到APPID+OPENID 已开通微信商户,并且开通企 ...
- 微信提现——企业付款到零钱demo(超详细小白都看得懂的)
一.p12证书下载 企业付款到零钱API (建议多看) apiclient_cert.p12证书:在微信商户平台–>账户设置–>API安全–>证书中下载的 . (自行下载) 二.开发 ...
- 微信零钱数据在服务器,关于微信企业付款到零钱X509Certificate2读取证书信息,发布到服务器访问不到的解决方案...
前言: 最近做了一个通过调用微信企业付款到用户零钱的功能,真的挺奇怪的,在我本地调试的时候都没有问题,但是当我发布到服务上的时候却一直无法读取到我的证书信息.读取的代码如下,使用的是微信官方文档提供的 ...
- 微信支付、微信企业付款到零钱工具类
微信支付.微信企业付款到零钱工具类 主要依赖:apache httpclient 4.5 jdk1.8 工具类主要功能: xml参数拼接 签名算法实现 post加密请求 import lombok.e ...
- Python实现微信企业付款到零钱
实现步骤 一.导入库 二.参数配置 三.参数签名 四.发起转账请求 五.调用实例 一.导入库 import random import hashlib import requests from xml ...
- 企业支付 开通 企业付款到零钱 开通条件 已解决
今天两个小程序,一个可以正常体现到零钱, 一个小程序不支持, 配置和代码都一样, 为什么不可以,结果一查找是因为,没有入住够90天,且必须30天有正常交易. 才可以正常使用企业付款到零钱. 代码提示 ...
最新文章
- Bitbucket Pipes发布,带来30+自动化CI/CD管道的方法
- 计划策略-40-最终装配计划
- 理解神经网络函数高频成分的收敛率界限
- 腾讯二面,我被 “赛马” 问题难住了
- c#使用CefSharp开发winform——环境搭建
- python if elif else
- Python捕捉命令输出、错误输出及赋值命令到变量的方法
- 请确保dx环境安装正常后进行开播_虎牙直播助手常见问题汇总
- GAMMA初学笔记一
- 33-Jenkins-修改插件源
- Node-RED使用指南:28:撤销与删除恢复
- db2 日期英式写法_英式与美式日期写法 基数与序数词辨析
- Proteus仿真-步进电机
- 机器学习-54-RL-06-Actor-Critic(强化学习-A2C,A3C,Pathwise Derivative Policy Gradient)
- 网络营销好学吗?自学和培训该怎么选?
- 《机器学习(周志华)》 习题5.5答案
- bootstrap-switch开关按钮表单插件
- SQLSERVER 集合处理——INTERSECT
- Multi-Object Tracking with Multiple Cues and Switcher-Aware Classification多目标跟踪论文
- html语音聊天室,h5聊天室模板|仿微信聊天室html5
热门文章
- Pandas里面的加权平均,我猜你不会用!
- 16. Segmentation
- 音视频篇 - Android 音视频涉及到的技术
- 传奇地图文件MapInfo参数大全
- 《高情商修炼手册》 by 小粥超人(小hi)Hygge @Chou
- Linux Mint系统常用软件安装
- 项目中 前后台接口 请求项目移植的问题
- easypanel php.ini,虚拟主机控制面板(easypanel)下载_虚拟主机控制面板(easypanel)官方下载-太平洋下载中心...
- win7打开chm文件显示“已取消到该网页导航”
- UI设计师面试时如何自我介绍