微信红包开发的 传金额与生成请求xml

传值:微信默认的金额为分 

在jsp页面:var myCash =parseFloat(((document.getElementById("my_cash").value)*i)/100);(防止1.1*100=110.000000001的情况)

取值作比较时,硬数据库查出的数据应扩大100倍进行比较。传值前应进行倍数扩大。

生成的xml:

 设置  将参数生成map
    private static Map<String,String> getParamMap(String orderNNo,String openId,String myCash,String actName,String wishing,String remark) {
        Map<String, String> paramMap = new HashMap<String, String>();
        paramMap.put("act_name", actName);//活动名称
        paramMap.put("client_ip", clientIp);//接口调用机器IP地址
        paramMap.put("mch_billno", orderNNo);//商户订单
        paramMap.put("mch_id", mch_id);//商户号
        paramMap.put("nonce_str", RoundUtil.getUUID());//随机字符串
        paramMap.put("re_openid", openId);//用户openid
        paramMap.put("remark", remark);//备注
        paramMap.put("send_name", sendName);//发红包者名称
        paramMap.put("total_amount", myCash);//付款金额
        paramMap.put("total_num", "1");//红包发送总人数
        paramMap.put("wishing", wishing);//红包祝福语
        paramMap.put("wxappid", appid);//商户appid
        paramMap.put("sign", getRedSignal(paramMap));//签名
        return paramMap;
        }


    getOrderNo
        public String getOrderNo() {
            String order = mch_id + new SimpleDateFormat("yyyyMMddss").format(new Date());
            Random r = new Random();
            for (int i = 0; i < 2; i++) {
                order += r.nextInt(9000) + 1000;
            }
            return order;
        }


       将 map拼装成xml
        private static String createXML(Map<String, String> map){
            String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><xml>";
            Set<String> set = map.keySet();
            Iterator<String> i = set.iterator();
            while(i.hasNext()){
            String str = i.next();
            xml+="<"+str+">"+"<![CDATA["+map.get(str)+"]]>"+"</"+str+">";
            }
            xml+="</xml>";
            return xml;
            }

getRedSignal

        public static String getRedSignal(Map<String, String> params) {
            SortedMap<String, String> packageParams = new TreeMap<String, String>();
            for (Map.Entry<String, String> m : params.entrySet()) {
                packageParams.put(m.getKey(), m.getValue().toString());
            }
            StringBuffer sb = new StringBuffer();
            Set<?> es = packageParams.entrySet();
            Iterator<?> it = es.iterator();
            while (it.hasNext()) {
                Map.Entry entry = (Map.Entry)it.next();
                String k = (String)entry.getKey();
                String v = (String)entry.getValue();
                if (!StringUtils.isEmpty(v) && !"sign".equals(k)
                        && !"key".equals(k)) {
                    sb.append(k + "=" + v + "&");
                }
            }
            sb.append("key="+partnerkey);
            System.out.println(sb.toString()+"      EnvelopService.java");
            String sign = RedMd5.MD5Encode(sb.toString(), charset).toUpperCase();
            return sign;
        }

发送xml请求
        public static String doSend(String url, String data) throws Exception {
            KeyStore keyStore  = KeyStore.getInstance("PKCS12");
            FileInputStream instream = new FileInputStream(new File(cerfile));//P12文件目录
            try {
                keyStore.load(instream, mch_id.toCharArray());//这里写密码..默认是你的MCHID
            } finally {
                instream.close();
            }
            SSLContext sslcontext = SSLContexts.custom()
                    .loadKeyMaterial(keyStore, mch_id.toCharArray())
                    .build();
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext,new String[] { "TLSv1" },null,
                    SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
            CloseableHttpClient httpclient = HttpClients.custom()
                    .setSSLSocketFactory(sslsf)
                    .build();
            try {
                HttpPost httpost = new HttpPost(url);  
                httpost.addHeader("Connection","keep-alive");  
                httpost.addHeader("Accept","* / *");  
                httpost.addHeader("Content-Type","application / x-www-form-urlencoded; charset = UTF-8");  
                httpost.addHeader("Host","api.mch.weixin.qq.com");  
                httpost.addHeader("X-Requested-With","XMLHttpRequest");  
                httpost.addHeader("Cache-Control","max-age = 0");  
                httpost.addHeader("User-Agent","Mozilla / 4.0(兼容; MSIE 8.0; Windows NT 6.0)");
                httpost.setEntity(new StringEntity(data,"UTF-8"));
                CloseableHttpResponse response = httpclient.execute(httpost);
                try {
                    HttpEntity entity = response.getEntity();
                    String jsonStr = toStringInfo(response.getEntity(),charset);
                    EntityUtils.consume(entity);
                   return jsonStr;
                } finally {
                    response.close();
                }
            } finally {
                httpclient.close();
            }
        }   

取得返回值

        String resXml = doSend(sendPacketUrl,xml);
        //红包发送成功,状态判断
        if(resXml.indexOf("<result_code><![CDATA[SUCCESS]]></result_code>")>-1) {

        //发送成功

        }

 

转载于:https://my.oschina.net/u/3229176/blog/898477

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值