精华内容
下载资源
问答
  • 微信支付、微信企业支付个人,微信企业付款到零钱,微信支付apiJSAPI支付 刷卡支付 扫码支付 订单退款 订单查询 退款查询 下载账单
  • c#微信支付、微信企业支付个人,微信企业付款到零钱, 代码DEMO.rar.rar c#微信支付、微信企业支付个人,微信企业付款到零钱, 代码DEMO.rar.rar c#微信支付、微信企业支付个人,微信企业付款到零钱, 代码...
  • 微信支付、企业支付、微信企业支付个人,微信企业付款到零钱, 代码DEMO 供大家参考 微信支付apiJSAPI支付 刷卡支付 扫码支付 订单退款 订单查询 退款查询 下载账单
  • 微信企业付款到个人零钱 C#Demo

    热门讨论 2017-11-24 17:50:03
    微信支付、企业支付、微信企业支付个人,微信企业付款到零钱, 代码DEMO 供大家参考
  • .net mvc 微信支付之企业付款

    千次阅读 2018-10-10 16:43:04
    先说一下功能需求,是关注微信公众号,然后根据用户的输入,判断是否需要从商户账号提现零钱到个人账户。由于这是第一次做公众号的开发,所以看了一下官方文档。 第一步要实现的是根据用户的输入关键字,做识别判断...

    先说一下功能需求,是关注微信公众号,然后根据用户的输入,判断是否需要从商户账号提现零钱到个人账户。由于这是第一次做公众号的开发,所以看了一下官方文档。

    第一步要实现的是根据用户的输入关键字,做识别判断是否需要发送领钱到用户,并且回复一条消息,提醒用户。微信公众平台提供了三种消息回复,即文本回复,音乐回复和图文回复。

    配置公众号后台服务器,启用的时候,需要向服务器地址发送一个get请求,然后用户发送消息的时候,微信会向这个服务器地址发送一个post请求,在mvc里面就是同一个action,只是一个是Get请求,一个是post请求。因为mvc不允许相同名字的action,所以,在post的action请求里面,加上[ActionName("XXXX")],然后action换一个其他的名字,这个里面的XXXX就是跟Get请求的action是同样的名字,这样就能避免相同名字的action的情况。

    现在来说,回复用户消息,上段我们说道,当用户向公众号发送了一个消息的时候,微信会把用户的消息,post请求到服务器,这个请求里面包含了xml结构的消息。我们需要对XML进行解析,XML的结构如下:

     <xml>
     <ToUserName><![CDATA[toUser]]></ToUserName>
     <FromUserName><![CDATA[fromUser]]></FromUserName>
     <CreateTime>12345678</CreateTime>
     <MsgType><![CDATA[text]]></MsgType>
     <Content><![CDATA[content]]></Content>
     </xml> 

    从这个里面,我们可以获取下一步,向用户发送领钱的一个重要参数,就是openid, openid是个人微信账号关注特定公众号之后生成的唯一识别码,这个识别码是绑定用户的微信号与公众号,所以我之前在网上查资料的时候,好多人都问,领钱提现,怎么知道用户的openId,这个是一个方法,你可以把openId存到数据库保存起来,因为微信的好多接口都需要这个参数,每个用户关注不同的公众号都会生成不同的openId,在微信的接口里面你只能获取到或者使用的只有openId, 不会用到用户的微信号。

    我们这里只需要判断MsgType是text的情况,这是发送的消息是文本的情况。通过获取Content内容,关键字识别,你可以进行下一步,提现领钱到用户账号。

    微信的官方接口说明网址:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2

    通过这个文档,其实很简单,我只说一下需要注意的地方,第一个地方就是需要证书,这个证书你需要去商户号后台里面下载。这个证书有什么用? 问得好,用处就是带着证书向微信的接口发出请求,不然会报一个“请下载证书”的错误。 这里我说明一下,怎么带着证书发送post请求,你下载完了证书之后,把他放到服务器,你可以选择导入到服务器的证书里面去,也可以不导入,貌似我没有导入证书,也可以提现成功。在.net里面有这样一个类,X509Certificate2 , 不知道的,可以百度或者谷歌。

      X509Certificate2 cert = new X509Certificate2(AppDomain.CurrentDomain.BaseDirectory + "cert\\apiclient_cert.p12", mchid);

    这个p12就是我们所需要的证书,mchid是证书的密码,是微信商户号。

    我自己在做的时候,调用这个类发现一个错误,就是找不到指定文件,我以为是证书没有权限,访问不了,后来发现不是,在网上找到的答案,需要到应用程序池里面,设置一个参数,设置完了就可以了。

    实例化这个类之后,在发起请求的时候,把这个证书加上就可以向微信的服务器发送post请求了。

    第二个需要注意的地方就是她的接口里面的参数:

    如果是第一次做这个会懵逼,这个商户帐号appid,指的是公众号的appid,商户号是微信商户平台的商户号。这里我需要吐槽一下,微信他有好多平台,每个平台都有一个后台,像我们这里,涉及到微信公众号平台和微信商户平台。

    第三个需要注意的就是他返回的内容,他返回的消息里面,依然是一个xml结构的内容。里面有一个return_code 和result_code,returncode 为SuCCESS表示请求发送成功,并不代表提现成功,只要result_code 为SUCCESS,才表示提现成功。

    基本上倒了这一步,就可以成功完成。

     

    展开全文
  • 最近接到一个开发需求,一个企业想用微信支付里面的,企业付款到零钱功能,利用此功能来给用会发红包,因为微信支付里的红包功能一次要付款1块钱,太多,所以他想利用此功能来发红包,这样红包金额可以低每次3角钱...

    最近接到一个开发需求,一个企业想用微信支付里面的,企业付款到零钱功能,利用此功能来给用会发红包,因为微信支付里的红包功能一次要付款1块钱,太多,所以他想利用此功能来发红包,这样红包金额可以低到每次3角钱,由于他原有系统是asp开发的,那我只能帮他用asp写一个:微信支付企业付款到零钱功能了,闲话不说,上代码:

    total_fee = Trim(Request.form("total_fee"))
    		Dim body,out_trade_no,attach
    		body = "微信企业付款(WxPay)"
    		partner_trade_no = wxpay.GetDateTime
    		attach = "sdly"'商户自定义数据包.
    		
    		wxpay.setParameter "appid",""
    		wxpay.setParameter "mch_id",""
    		wxpay.setParameter "mchid",MCHID
    		wxpay.setParameter "mch_appid",APPID
    		wxpay.setParameter "partner_trade_no",partner_trade_no
    		wxpay.setParameter "check_name","NO_CHECK"
    		wxpay.setParameter "amount",(total_fee)*100
    		wxpay.setParameter "spbill_create_ip","127.0.0.1"
    		wxpay.setParameter "desc",body
    		'wxpay.setParameter "openid",openid
    		wxpay.setParameter "openid",wx_openid
    		
    		xml = wxpay.Get_company_pay()
    		'wxpay.Die xml
    		result = wxpay.Get_Xml_Text(xml,"//result_code")
    			If result = "SUCCESS" Then
    				wxpay.Die "付款成功!"
    			Else
    				wxpay.Die wxpay.Get_Xml_Text(xml,"//err_code_des")
    			End If
    	End If
    

    有需要asp企业付款到零钱代码的朋友,可以直接复制了

    展开全文
  • 微信支付、微信企业付款到零钱工具类 主要依赖:apache httpclient 4.5 工具类主要功能: xml参数拼接 签名算法实现 post加密请求 import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpEntity; import...

    微信支付、微信企业付款到零钱工具类
    主要依赖:apache httpclient 4.5 jdk1.8
    工具类主要功能:

    • xml参数拼接
    • 签名算法实现
    • post加密请求
    import lombok.extern.slf4j.Slf4j;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.conn.ConnectTimeoutException;
    import org.apache.http.conn.ConnectionPoolTimeoutException;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.ssl.SSLContexts;
    import org.apache.http.util.EntityUtils;
    
    import javax.net.ssl.HostnameVerifier;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLSession;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.lang.reflect.Field;
    import java.net.SocketTimeoutException;
    import java.security.*;
    import java.security.cert.CertificateException;
    import java.util.Set;
    import java.util.SortedMap;
    import java.util.TreeMap;
    
    @Slf4j
    public class WxPayHelper {
        /**
         * 企业付款到零钱接口URL.
         */
        private static final String TRANS_URL = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
    
        private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
                "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
        /**
         * 微信支付签名算法sign
         * @param parameters 参数集合
         * @return 返回md5签名
         */
        public static String createSign(String signKey,SortedMap<Object,Object> parameters) {
            StringBuilder sb = new StringBuilder();       // 多线程访问的情况下需要用StringBuffer
            Set es = parameters.keySet();                 // 所有参与传参的key按照accsii排序(升序)
            for (Object set : es) {
                String k = set.toString();
                Object v = parameters.get(k);
                sb.append(k)
                        .append("=")
                        .append(v.toString())
                        .append("&");
            }
            sb.append("key=").append(signKey);
            return str2MD5(sb.toString(), "utf-8").toUpperCase();
        }
    
        /**
         * MD5加密
         * @param data 要加密的数据
         * @param encode 加密的编码
         * @return md5字符串
         */
        public static String str2MD5(String data, String encode) {
            String resultString = null;
            try {
                MessageDigest md = MessageDigest.getInstance("MD5");
                if (encode == null || "".equals(encode))
                    resultString = byteArrayToHexString(md.digest(data
                            .getBytes()));
                else {
                    resultString = byteArrayToHexString(md.digest(data
                            .getBytes(encode)));
                }
            } catch (Exception exception) {
            }
            return resultString;
        }
    
        /**
         * byte数组转换16进制字符串
         * @param b 要转换的byte数组
         * @return 16进制字符串
         */
        private static String byteArrayToHexString(byte b[]) {
            StringBuffer resultSb = new StringBuffer();
            for (int i = 0; i < b.length; i++)
                resultSb.append(byteToHexString(b[i]));
    
            return resultSb.toString();
        }
    
        /**
         * byte转换成16进制字符串
         * @param b 要转换的byte
         * @return byte对应的16进制字符串
         */
        private static String byteToHexString(byte b) {
            int n = b;
            if (n < 0)
                n += 256;
            int d1 = n / 16;
            int d2 = n % 16;
            return hexDigits[d1] + hexDigits[d2];
        }
    
        /**
         * map集合参数转换为xml格式
         * @param dataMap 要转换的map对象
         * @return XML格式的字符串
         */
        public static String map2XML(SortedMap<Object, Object> dataMap) {
            StringBuilder strBuilder = new StringBuilder();
            Set<Object> objSet = dataMap.keySet();
            strBuilder.append("<xml>\n");
            for (Object key : objSet)
            {
                if (key == null)
                {
                    continue;
                }
                Object value = dataMap.get(key);
                strBuilder.append("<")
                        .append(key.toString())
                        .append(">")
                        .append(value)
                        .append("</")
                        .append(key.toString())
                        .append(">\n");
            }
            strBuilder.append("</xml>");
            return strBuilder.toString();
        }
    
        /** 生成随机数.
         * @param count 要生成的随机数位数
         * @return 随机数字符串
         */
        private String createNonceStr(int count){
            String[] nums = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
            int maxIndex = nums.length - 1;
            int numIndex;
            StringBuilder builder = new StringBuilder(count);
            for (int i = 0; i < count; i++){
                numIndex = (int)(Math.random() * maxIndex);
                builder.append(nums[numIndex]);
            }
            return builder.toString();
        }
    
        /**
         * 生成签名和xml参数的main方法测试.
         * see https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=4_3
         * @param args
         */
        public static void main(String[] args) {
            String key = "192006250b4c09247ec02edce69f6a2d";
            SortedMap<Object, Object> map = new TreeMap<>();
            map.put("appid","wxd930ea5d5a258f4f");
            map.put("mch_id","10000100");
            map.put("device_info","1000");
            map.put("body","test");
            map.put("nonce_str","ibuaiVcKdpRxkhJA");           // 这里为了跟文档的结果对应,直接使用文档的随机数
            String sign = WxPayHelper.createSign(key, map);
            map.put("sign",sign);
            String xmlParam = WxPayHelper.map2XML(map);
            System.out.println(xmlParam);
        }
    
        /
        /**
         * 以下是http请求相关接口方法.
         */
        /
        /**
         * 加载证书.
         * @param certPath 证书文件绝对路径
         * @param mchid 商户id
         */
        private static KeyStore initCert(String certPath, String mchid) {
            KeyStore keyStore = null;
            // 加载本地的证书进行https加密传输
            FileInputStream instream = null;
            try {
                keyStore = KeyStore.getInstance("PKCS12");
                instream = new FileInputStream(new File(certPath));
                keyStore.load(instream, mchid.toCharArray()); // 加载证书密码,默认为商户ID
            } catch (KeyStoreException e) {
                log.error(e.getMessage(), e);
            } catch (FileNotFoundException e) {
                log.error(e.getMessage(), e);
            } catch (NoSuchAlgorithmException e) {
                log.error(e.getMessage(), e);
            } catch (CertificateException e) {
                log.error(e.getMessage(), e);
            } catch (IOException e) {
                log.error(e.getMessage(), e);
            } finally {
                if (instream!=null) {
                    try {
                        instream.close();
                    } catch (IOException e) {
                        log.error(e.getMessage(), e);
                    }
                }
            }
            return keyStore;
        }
    
        /**
         *
         * 创建CloseableHttpClient.
         * @param keyStore
         * @param keyPassword
         * @return
         */
        private static CloseableHttpClient createHttpClient(KeyStore keyStore, char[] keyPassword) {
            // Trust own CA and all self-signed certs
            SSLContext sslcontext = null;
            try {
                sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, keyPassword).build();
            } catch (NoSuchAlgorithmException e) {
                log.error(e.getMessage(), e);
            } catch (KeyManagementException e) {
                log.error(e.getMessage(), e);
            } catch (KeyStoreException e) {
                log.error(e.getMessage(), e);
            } catch (UnrecoverableKeyException e) {
                log.error(e.getMessage(), e);
            }
            // Allow TLSv1 protocol only
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                    sslcontext,
                    new String[] {"TLSv1"},
                    null,
                    new HostnameVerifier() {
                        @Override
                        public boolean verify(String hostname, SSLSession sslSession) {
                            // 微信商户平台的支付接口验证直接通过
                            if ("api.mch.weixin.qq.com".equals(hostname)) {
                                return true;
                            } else {
                                HostnameVerifier hv = SSLConnectionSocketFactory.getDefaultHostnameVerifier();
                                return hv.verify(hostname, sslSession);
                            }
                        }
                    });
            CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
            // 根据默认超时限制初始化requestConfig
            return httpClient;
        }
    
        /**
         * post传输xml数据.
         * @param url 传输url
         * @param xmlObj xml参数
         * @param mchid 商户id
         * @param certPath 证书文件的绝对路径
         * @return
         */
        public static String post(String url, String xmlObj, String mchid, String certPath) {
            RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(5000).setConnectTimeout(10000).build();
            // 加载证书
            KeyStore keyStore = initCert(certPath, mchid);
            CloseableHttpClient httpClient = createHttpClient(keyStore, mchid.toCharArray());
            String result = null;
            HttpPost httpPost = new HttpPost(url);
            // 得指明使用UTF-8编码,否则到API服务器XML的中文不能被成功识别
            String defaultCharset = "UTF-8";
            StringEntity postEntity = new StringEntity(xmlObj, defaultCharset);
            httpPost.addHeader("Content-Type", "text/xml");
            httpPost.setEntity(postEntity);
            // 设置请求器的配置
            httpPost.setConfig(requestConfig);
            try {
                HttpResponse res = httpClient.execute(httpPost);
                if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    HttpEntity entity = res.getEntity();
                    result = EntityUtils.toString(entity, defaultCharset);
                }
            } catch (ConnectionPoolTimeoutException e) {
                log.error(e.getMessage(), e);
            } catch (ConnectTimeoutException e) {
                log.error(e.getMessage(), e);
            } catch (SocketTimeoutException e) {
                log.error(e.getMessage(), e);
            } catch (Exception e) {
                log.error(e.getMessage(), e);
            } finally {
                httpPost.abort();
            }
            return result;
        }
    
        /**
         * 发送请求.
         * @param key 密钥
         * @param certPath  API证书证书apiclient_cert.p12
         * @param model 企业付款到零钱接口所需参数
         * @return String
         */
        public static String doTransfers(String key, String certPath, WxMchPayB2c model)
                throws IllegalAccessException {
            SortedMap<Object, Object> map = new TreeMap<>();
            Field[] declaredFields = model.getClass().getDeclaredFields();
            for (Field field : declaredFields) {
                field.setAccessible(true);
                String k = field.getName();
                Object v = field.get(model);
                if (v != null) {
                    map.put(k, v);
                }
            }
            String sign = WxPayHelper.createSign(key, map);
            map.put("sign",sign);
            String xmlParam = WxPayHelper.map2XML(map);
            String result = post(TRANS_URL, xmlParam, model.getMchid(), certPath);
            return result;
        }
    }
    
    
    
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    
    /**
     * @Desc https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2
     */
    @Data
    @ApiModel(value="net.mondelez.scan.microservice.entity.vo.WxMchPayB2c", description = "微信商户平台-微信支付-企业付款到零钱")
    public class WxMchPayB2c {
        @ApiModelProperty(value="申请商户号的appid或商户号绑定的appid", required=true)
        private String mch_appid;
        @ApiModelProperty(value="微信支付分配的商户号", required=true)
        private String mchid;
        @ApiModelProperty(value="微信支付分配的终端设备号", required=false)
        private String device_info;
        @ApiModelProperty(value="随机字符串,不长于32位", required=true)
        private String nonce_str;
        @ApiModelProperty(value="签名,签名算法:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=4_3", required=true)
        private String sign;
        @ApiModelProperty(value="商户订单号,需保持唯一性(只能是字母或者数字,不能包含有其它字符)", required=true)
        private String partner_trade_no;
        @ApiModelProperty(value="商户appid下,某用户的openid", required=true)
        private String openid;
        @ApiModelProperty(value="校验用户姓名选项,NO_CHECK:不校验真实姓名,FORCE_CHECK:强校验真实姓名", required=true)
        private String check_name="NO_CHECK";
        @ApiModelProperty(value="收款用户真实姓名,如果check_name设置为FORCE_CHECK,则必填用户真实姓名,如需电子回单,需要传入收款用户姓名", required=false)
        private String re_user_name;
        @ApiModelProperty(value="企业付款金额,单位为分", required=true)
        private Integer amount;
        @ApiModelProperty(value="企业付款备注,必填。注意:备注中的敏感词会被转成字符*", required=true)
        private String desc;
        @ApiModelProperty(value="Ip地址,该IP同在商户平台设置的IP白名单中的IP没有关联,该IP可传用户端或者服务端的IP", required=false)
        private String spbill_create_ip;
    }
    

    参考:
    https://blog.csdn.net/u013564742/article/details/88648885
    https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=4_3
    https://kf.qq.com/faq/140225MveaUz150107ERniAN.html
    https://www.jianshu.com/p/a361ed7c6691
    https://www.jianshu.com/p/ad4c7ce94518

    展开全文
  • 企业付款到零钱API开发~~~ 付款微信

    万次阅读 多人点赞 2018-01-27 10:30:32
    近日,在开发“微信企业付款到零钱”的功能。之前有过微信开发的经验,但是第一次接触“付款到零钱“这一块的业务,查询了很多的博客资料以及走了很多的弯路。也发现“企业付款到零钱”分享的博客并不多。特地写了该...

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

    代码下载地址如下:
    链接:https://pan.baidu.com/s/1h6_ZSz5RbFARlY9yxkvj5w
    提取码:weft
    有任何关于微信开发的问题可以相互交流, 推荐QQ:2172931891 , 另外有微商城、微分销、微信小游戏等系统源码,有需要可以联系免费提供。
    在这里插入图片描述
    【稍微提一下:】上一篇博客分享了“企业付款到银行卡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,就对这三者进行加密。初开发者的误区:不知道该加密什么数据、观看网上的博客胡乱进行签名,导致签名错误
    【温馨提示:】数字签名是一般开发人员容易遇到的错误,记住“你没遇到数字签名错误,都不好意思说自己做过微信退款支付订单查询等功能”。 签名工具类见:我这里就不贴出来了
    http://blog.csdn.net/xiaozhegaa/article/details/79127283

    耐心解决就行
    (3) xml到map、map到xml转化、发送Post请求、签名等操作。具体见下篇文章。方法和类都分享出来了,copy即可
    http://blog.csdn.net/xiaozhegaa/article/details/79127283

    三、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来判断是否成功与失败

    不得不再啰嗦一下。下面设计到签名、mapToXml转化、xmlToMap转化、发送请求到API。这些方法都可以在下面网址看到。这里我Xml转化成Map。我是习惯用一个Bean接收,也有范例的代码,大家模仿能力要强一点。这次贴出来给大家看看吧
    http://blog.csdn.net/xiaozhegaa/article/details/79127283

    @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();// 指向根节点 
    					List<Element> 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集合
    		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_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();
    		}
    		
    		
    	}
    

    这里写图片描述

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

    展开全文
  • 微信支付企业付款到零钱

    千次阅读 2018-06-30 18:27:31
    在微信支付企业付款到零钱的时候网上找了一下微信支付商户的很多,但是微信支付企业付款到用户(提现~应该可以叫提现吧)却很少,于是想写写。 1、首先微信支付企业付款文档地址 2、这第一步就是获取微信用户的...
  • Java 微信企业付款到个人零钱
  • /** * @Description 微信 工具类 * @Author Li Wei Shan * @Date 2020-12-09 18:25 * @Version 1.0 **/ @Slf4j public class WxService { /** * 微信提现(企业付款) */ public static Map payForUser(String ...
  • // 加载公钥 RsaKeyParameters pubkey; using (var sr = new StreamReader(ConfigurationManager.AppSettings["PubKey"])) { var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(sr);...
  • 微信企业付款到零钱API

    万次阅读 2018-04-17 19:22:02
    由于项目需求老大叫我开发“微信企业付款到零钱”的功能,这之前我做过一些微信支付的相关东西,对我而言微信封装的东西感觉比ALI难过一些。言归正传,在没有找到微信官方的API的情况下就只能借鉴之前写过的各位大佬...
  • 最近开发遇到企业付款到零钱这个问题,经过查阅微信开发文档和其他博客得以解决,在此记录下。 参考:[微信支付开发文档]https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2 如果你细看一下...
  • 想通过企业付款实现微信提现功能,但是一直没找到开通入口。随后在一篇知乎上看到有人提供了这个地址,是有效的。原谅我知乎链接忘记了,没有贴出来。。。 ... 不明白为何藏起来。...———————————————— ...
  • #appid() wx.appid= #商户id wx.mch_id= #支付回调地址 wx.notify_url=https://ip**/***/json/wxpay/succes #是否检测实名 wx.check_name=NO_CHECK #微信支付API秘钥 wx.api_key= #微信企业付款证书地址 ...
  • ToBankFromGzh.aspx ------企业付款到银行卡 ToBankFromGzh_Query.aspx-----查询企业付款到银行卡 分享的主要目的还是因为RSA拖我太多时间了,希望能帮助各位码友 分享的仅仅只是示例代码 2018.04.12
  • 微信支付企业付款到个人,包括付款 以及 查询 参考文章http://blog.csdn.net/fengshizty/article/details/53204566
  • 二、如果没有“企业付款到用户”产品,进入产品大全页面,将网址原网址.com后方更改为/index.php/public/product/detail?pid=5,参见下图 注:部分浏览器内核版本不支持开通这个产品 ...
  • 常见错误参考 https://blog.csdn.net/a584257442/article/details/86318725 完整demo,及常见错误参考 https://www.jianshu.com/p/8befe6dfe22c
  • java 企业付款到零钱 微信提现功能讲解

    千次阅读 热门讨论 2018-08-10 21:18:06
    * 企业付款描述信息 理赔 企业付款操作说明信息 */ private String desc; /** * Ip地址 该IP同在商户平台设置的IP白名单中的IP没有关联,该IP可传用户端或者服务端的IP。 */ private String spbill_create_...
  • 由于微信小程序红包接口,场景值限制,满足不了公司业务场景。 微信小程序红包,只有在(1011,1025,1047,1124... 企业支付微信官方文档: https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14...
  • 查考:https://blog.csdn.net/xiaozhegaa/article/details/79178751
  • 微信支付(企业付款到个人微信零钱账户)微信公众平台开发教程(6简介开发步骤后端代码实现 简介 Senparc.Weixin SDK 是由盛派网络(Senparc)团队自主研发的针对微信各模块的 开发套(C#SDK), 已全面支持微信...
  • 突然客户来电:用户申请提现(【企业付款到零钱】功能),“审核通过”按钮一直提示“不支持微信提现”。 我于是急忙登录服务器查看日志: Caused by: javax.net.ssl.SSLHandshakeException: No appropriate pro.....
  • Java微信支付-微信企业付款到个人

    千次下载 热门讨论 2016-11-17 19:22:25
    微信支付企业付款到个人,包括付款 以及 查询 参考文章http://blog.csdn.net/fengshizty/article/details/53204566
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 微信企业付款到零钱(发红包)

    千次阅读 2019-08-17 10:42:59
    最近在做微信用户提现功能用到了微信的企业付款到零钱,做简单记录 微信开发者文档->企业付款 开发之前需要获得的重要信息 商户号mchid:微信支付分配的商户号 商户账号appid 在有效期内的API证书:微信商户平台...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 183
精华内容 73
关键字:

.net企业付款到零钱