精华内容
下载资源
问答
  • 微信付款到零钱

    2017-11-14 16:23:57
    微信付款到零钱,可以直接将钱打入用户的“微信零钱”中,微信支付将做零钱入账消息通知,零钱收支明细会展示相应记录,注意配置证书的位置,证书获取时间较长呀!!
  • 微信付款到零钱demo

    2019-01-31 15:57:13
    微信付款到零钱demo,可以看看。
  • 企业微信付款到零钱

    2019-09-14 16:05:02
    企业微信付款到零钱,提示证书不存在,可能原因如下: 1. apiclient_cert.p12文件的绝对路径,或者如果放在项目中,请以classpath:开头指定 转载于:http...

    企业微信付款到零钱,提示证书不存在,可能原因如下:

    1. apiclient_cert.p12文件的绝对路径,或者如果放在项目中,请以classpath:开头指定

     

    转载于:https://my.oschina.net/whatwhy/blog/3076270

    展开全文
  • 有关于微信付款,具体是企业付款到微信零钱和企业付款到银行卡,银行包括17家
  • 个人对于企业微信付款到零钱的一些理解与说明,含代码 前段时间因公司业务需求,需要开发一个企业微信直接付款到用户微信账户的功能,然后就去微信官方文档看了一下,点击进入微信企业支付官方文档 没什么特别的...

    个人对于企业微信付款到零钱的一些理解与说明,含代码

    前段时间因公司业务需求,需要开发一个企业微信直接付款到用户微信账户的功能,然后就去微信官方文档看了一下,点击进入微信企业支付官方文档

    没什么特别的地方,也算是一个普通的接口,不过除了代码外,需要特别注意的地方就是调用这个接口需要微信商户端的证书,这是微信官方对商户证书描述的文档

    需要注意的有三步:
    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);
            //各位从自己的系统中获取所要付款的用户的openid
            map.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 = "";
            //指定读取证书格式为PKCS12
            KeyStore 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的SSLSocketFactory
            SSLConnectionSocketFactory 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();
        }
    

    以上.希望能帮到大家
    如果我有讲的不好的地方,或者大家有不理解的,都可以私信或者评论我,一定回复

    展开全文
  • 一、微信付款接口可参考:付款到零钱: https://blog.csdn.net/daotiao0199/article/details/85319451 二、企业微信发红包## 标题main方法,调用发红包接口 public static void main (String[] args) throws ...

    一、微信付款接口可参考:付款到零钱:

    https://blog.csdn.net/daotiao0199/article/details/85319451
    二、企业微信发红包## 标题main方法,调用发红包接口

    public static void main (String[] args) throws IOException{
    		String  url="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
    		String wx_appid="wx1be1xxxxxxx";
    		String wx_mchid="1555xxxxx";
    		String wx_mchkey="Thxxxxxxxxxxxxxxxx";
    		String wxCertPath="E:\\cert\\apiclient_cert.p12";
    		String logNo="xxxx2019091019933ddd";
    
    		SortedMap<String,Object> map =new TreeMap<String,Object>();
    		map.put("nonce_str", "ASDXCV");//可以写死
    		map.put("mch_billno", logNo);
    		map.put("mch_id", wx_mchid);
    		map.put("wxappid", wx_appid);
    		map.put("send_name", "测试红包");
    		map.put("re_openid", "oKvRh5ljxxxxxx");
    		map.put("total_amount", 30);
    		map.put("total_num", "1");
    		map.put("wishing", "祝福红包");
    		map.put("client_ip", "127.0.0.1");
    		map.put("act_name", "祝福红包二");
    		map.put("remark", "祝福红包描述");
    		map.put("scene_id", "PRODUCT_1");
    		String sign=createSignBalance("utf-8", map, wx_mchkey);
    		map.put("sign", sign);
    		String rest=WXHttpClient.postData(url, XmlParse.mapToXml(map, "xml"), wx_mchid, wxCertPath);
    		System.out.println("http请求结果:"+rest);
    	}
    /** 
    	 * 支付签名算法sign 
    	 * @param characterEncoding    编码集   UTF-8
    	 * @param parameters           传入的有序map
    	 * @param key                  传入的秘钥
    	 * @return 
    	 */  
    	@SuppressWarnings({ "rawtypes" })  
    	public static String createSignBalance(String characterEncoding,SortedMap<String,Object> parameters,String pkey){  
    		StringBuffer sb = new StringBuffer();  
    		Set es = parameters.entrySet();//所有参与传参的参数按照accsii排序(升序)  
    		Iterator it = es.iterator();  
    		while(it.hasNext()) {  
    			Map.Entry entry = (Map.Entry)it.next();  
    			String k = (String)entry.getKey();  
    			Object v = entry.getValue();  
    			if(null != v && !"".equals(v)   
    					&& !"sign".equals(k) && !"key".equals(k)) {  
    				sb.append(k + "=" + v + "&");  
    			}  
    		}  
    		sb.append("key=" + pkey);  
    		String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
    		return sign;  
    	}  
    
    

    MD5Util类

    package com.sanxia.common.utils;
    
    import java.security.MessageDigest;
    
    public class MD5Util {
    	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();  
        }  
      
        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];  
        }  
      
        public static String MD5Encode(String origin, String charsetname) {  
            String resultString = null;  
            try {  
                resultString = new String(origin);  
                MessageDigest md = MessageDigest.getInstance("MD5");  
                if (charsetname == null || "".equals(charsetname))  
                    resultString = byteArrayToHexString(md.digest(resultString  
                            .getBytes()));  
                else  
                    resultString = byteArrayToHexString(md.digest(resultString  
                            .getBytes(charsetname)));  
            } catch (Exception exception) {  
            }
            return resultString;  
        }  
      
        /**
         * Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。
         * @param src
         * @return
         */
    	public static String bytesToHexString(byte[] src){   
    	    StringBuilder stringBuilder = new StringBuilder("");   
    	    if (src == null || src.length <= 0) {   
    	        return null;   
    	    }   
    	    for (int i = 0; i < src.length; i++) {   
    	        int v = src[i] & 0xFF;   
    	        String hv = Integer.toHexString(v);   
    	        if (hv.length() < 2) {   
    	            stringBuilder.append(0);   
    	        }   
    	        stringBuilder.append(hv);   
    	    }   
    	    return stringBuilder.toString();   
    	} 
        
        
        
        private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",  
            "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };  
    }
    
    

    WXHttpClient类

    @SuppressWarnings("deprecation")
    public class WXHttpClient {
     
        private static int socketTimeout = 10000;// 连接超时时间,默认10秒
        private static int connectTimeout = 30000;// 传输超时时间,默认30秒
        private static RequestConfig requestConfig;// 请求器的配置
        private static CloseableHttpClient httpClient;// HTTP请求器
     
        /**
         * 通过Https往API post xml数据
         *
         * @param url API地址
         * @param xmlObj 要提交的XML数据对象
        * @param mchId 商户ID
        * @param certPath 证书位置
         * @return
         */
        public static String postData(String url, String xmlObj, String mchId, String certPath) {
            // 加载证书
            try {
                initCert(mchId, certPath);
            } catch (Exception e) {
                e.printStackTrace();
            }
            String result = null;
            HttpPost httpPost = new HttpPost(url);
            // 得指明使用UTF-8编码,否则到API服务器XML的中文不能被成功识别
            StringEntity postEntity = new StringEntity(xmlObj, "UTF-8");
            httpPost.addHeader("Content-Type", "text/xml");
            httpPost.setEntity(postEntity);
            // 根据默认超时限制初始化requestConfig
            requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();
            // 设置请求器的配置
            httpPost.setConfig(requestConfig);
            try {
                HttpResponse response = null;
                try {
                    response = httpClient.execute(httpPost);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                HttpEntity entity = response.getEntity();
                try {
                    result = EntityUtils.toString(entity, "UTF-8");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } finally {
                httpPost.abort();
            }
            return result;
        }
     
        /**
         * 加载证书
         *
         * @param mchId 商户ID
         * @param certPath 证书位置
         * @throws Exception
         */
        private static void initCert(String mchId, String certPath) throws Exception {
            // 证书密码,默认为商户ID
            String key = mchId;
            // 证书的路径
            String path = certPath;
            // 指定读取证书格式为PKCS12
            KeyStore keyStore = KeyStore.getInstance("PKCS12");
            // 读取本机存放的PKCS12证书文件
            FileInputStream instream = new FileInputStream(new File(path));
            try {
                // 指定PKCS12的密码(商户ID)
                keyStore.load(instream, key.toCharArray());
            } finally {
                instream.close();
            }
            SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, key.toCharArray()).build();
            SSLConnectionSocketFactory sslsf =
                    new SSLConnectionSocketFactory(sslcontext, new String[] {"TLSv1"}, null,
                            SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
            httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
        }
        
    }
    
    
    展开全文
  • 微信提现到零钱微信内部交易,不需要手续费)价格格式错误:可能是价格经过计算后.doubleValue了一下 最后价格是 200.00 企业付款签名错误:和支付的时候签名的参数有出入(搞了半天,最后到看了一段php代码后做...
    微信提现到零钱(微信内部交易,不需要手续费)
    价格格式错误:可能是价格经过计算后.doubleValue了一下 最后价格是 200.00 
    企业付款签名错误:和支付的时候签名的参数有出入(搞了半天,最后到看了一段php代码后做了一下调整。OK了)
    参考PHP博客:http://blog.csdn.net/sinat_35861727/article/details/72843383
    
    Map<String,String> data = new HashMap<>();
    data.put("mch_appid",Constant.WX_APPID);
    data.put("mchid",Constant.WXPAY_MCHID);
    data.put("nonce_str",withdrawApply.getNonceStr()); 
    data.put("partner_trade_no",withdrawApply.getId()+"");
    data.put("openid",withdrawApply.getWxOpenid());
    data.put("check_name","NO_CHECK");
    String price = withdrawApply.getPrice().multiply(new BigDecimal(100)).intValue()+""; //价格一定要保证int类型字符串  不能又小数点
    data.put("amount",price);
    data.put("desc","用户"+withdrawApply.getUid()+"提现");
    data.put("spbill_create_ip",getIpAddress());
    String sign = WXPayUtil.generateSignature(data, Constant.WXPAY_KEY);  
    data.put("sign",sign);
    String xml = WXPayUtil.mapToXml(data);
    String url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
    String certificate_path = "conf"+File.separator+"apiclient_cert.p12";   //证书路径
    String request = CommonUtil.request(url, xml, certificate_path);
    enerateSignature():
     /**
         * 生成签名. 注意,若含有sign_type字段,必须和signType参数保持一致。
         *
         * @param data 待签名数据
         * @param key API密钥
         * @param signType 签名方式
         * @return 签名
         */
        public static String generateSignature(final Map<String, String> data, String key, SignType signType) throws Exception {
            Set<String> keySet = data.keySet();
            String[] keyArray = keySet.toArray(new String[keySet.size()]);
            Arrays.sort(keyArray);
            StringBuilder sb = new StringBuilder();
            for (String k : keyArray) {
                if (k.equals(WXPayConstants.FIELD_SIGN)) {
                    continue;
                }
                if (data.get(k).trim().length() > 0) // 参数值为空,则不参与签名
                    sb.append(k).append("=").append(data.get(k).trim()).append("&");
            }
            sb.append("key=").append(key);
            if (SignType.MD5.equals(signType)) {
                return MD5(sb.toString()).toUpperCase();
            }
            else if (SignType.HMACSHA256.equals(signType)) {
                return HMACSHA256(sb.toString(), key);
            }
            else {
                throw new Exception(String.format("Invalid sign_type: %s", signType));
            }
        }
    	/**
         * 生成 MD5
         *
         * @param data 待处理数据
         * @return MD5结果
         */
        public static String MD5(String data) throws Exception {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] array = md.digest(data.getBytes("UTF-8"));
            StringBuilder sb = new StringBuilder();
            for (byte item : array) {
                sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
            }
            return sb.toString().toUpperCase();
        }
    	/**
         * 生成 HMACSHA256
         * @param data 待处理数据
         * @param key 密钥
         * @return 加密结果
         * @throws Exception
         */
        public static String HMACSHA256(String data, String key) throws Exception {
            Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
            SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
            sha256_HMAC.init(secret_key);
            byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
            StringBuilder sb = new StringBuilder();
            for (byte item : array) {
                sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
            }
            return sb.toString().toUpperCase();
        }
    
    展开全文
  • 微信支付、微信企业支付到个人,微信企业付款到零钱微信支付apiJSAPI支付 刷卡支付 扫码支付 订单退款 订单查询 退款查询 下载账单
  • c#微信支付、微信企业支付到个人,微信企业付款到零钱, 代码DEMO.rar.rar c#微信支付、微信企业支付到个人,微信企业付款到零钱, 代码DEMO.rar.rar c#微信支付、微信企业支付到个人,微信企业付款到零钱, 代码...
  • 首先附上附上微信企业付款到零钱的官方文档地址微信企业付款到零钱(提现到零钱) ready go! 用户付款到商户平台的账户 与 商户付款到个人的账户是相互独立的 意思是商户要付款到个人必须用自己充值到商户平台...
  • PHP-微信提现到零钱

    2019-03-28 09:09:06
    哈喽大家好,在原来做的微信支付的各种接口里总会不经意的就踩个地雷,虽然都是小问题,但是还是会浪费一些时间,于是乎,今儿个心血来潮就写一个关于微信提现到零钱【俗称企业付款到零钱】互相探讨,大佬轻喷哈 ...
  • 微信支付、企业支付、微信企业支付到个人,微信企业付款到零钱, 代码DEMO 供大家参考 微信支付apiJSAPI支付 刷卡支付 扫码支付 订单退款 订单查询 退款查询 下载账单
  • 主要为大家详细介绍了Thinkphp 5.0实现微信企业付款到零钱,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 关于微信企业付款到零钱

    万次阅读 热门讨论 2018-07-19 13:12:46
    近日,在开发“微信企业付款到零钱”的功能。之前有过微信开发的经验,但是第一次接触“付款到零钱“这一块的业务,查询了很多的博客资料以及走了很多的弯路。也发现“企业付款到零钱”分享的博客并不多。特地写了该...
  • 微信企业付款到零钱API

    千次阅读 2018-04-17 19:22:02
    由于项目需求老大叫我开发“微信企业付款到零钱”的功能,这之前我做过一些微信支付的相关东西,对我而言微信封装的东西感觉比ALI难过一些。言归正传,在没有找到微信官方的API的情况下就只能借鉴之前写过的各位大佬...
  • 微信企业付款到零钱实战操作指南,包含了一部分代码,如有不清楚的,可以联系我。远程解决问题,需要微信企业付款到零钱php版本的,也可以联系我。
  • 开发微信企业付款到零钱步骤详解

    千次阅读 2018-08-07 15:09:30
    上篇博文《开发微信企业付款到零钱步骤详解》已经进行对这些功能进行过的描述和一些步骤的描写。这个和开发企业付款到银行卡的开发步骤基本一致,不过这个有开通微信企业付款到零钱有点要求:1、商户号(或同主体...
  • 微信支付、微信企业付款到零钱工具类 主要依赖:apache httpclient 4.5 工具类主要功能: xml参数拼接 签名算法实现 post加密请求 import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpEntity; import...
  • 企业付款为企业提供付款至用户零钱的能力,支持通过API接口付款,或通过微信支付商户平台(pay.weixin.qq.com)网页操作付款。 使用条件 1、商户号(或同主体其他非服务商商户号)已入驻90日 ...企业付款到零钱资...
  • 微信企业付款到零钱功能介绍

    千次阅读 2020-08-18 16:59:40
    微信企业付款到零钱功能介绍 一、企业付款至零钱业务介绍 企业付款业务是为了协助商户方便地实现企业向个人付款,针对部分有开发能力的商户,通过API或网页操作,付款至目标用户(企业可根据APPID+OpenID锁定目标...
  • C# 微信转账到零钱

    2020-04-16 13:42:05
    用于企业向微信用户个人付款 ,支持向指定微信用户的openid付款。 适用场景 在拥有某小程序或公众号内的用户的openid情况下,完成企业微信你对指定用户完成转账的场景。 C# 代码 private const string mch_appid = ...
  • java 微信企业转账给个人继承微信sdk 非常Good 不会的可以加我可远程 比网上的那些直接给项目的好很多 新手易懂
  • 微信企业付款到零钱

    2021-04-02 14:58:46
    企业付款 直接上代码 关键入参 package cn.country.cunyue.app.pojo.dto.weixin; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @Desc ...
  • 微信企业付款到零钱 先检查微信商户号的资质是T+1还是T+N,两种账户的要求标准不同,T+1需要90天的流水,T +N不需要 签名方面需要用MD5 微信提现金额最小值为一元 请求得失后需要验证证书,证书在商户平台下载,路径使用...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 325
精华内容 130
关键字:

微信付款到零钱