文档章节

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

D
 DailyDiary
发布于 2017/05/12 18:23
字数 540
阅读 8
收藏 0

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

在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) {

        //发送成功

        }

 

© 著作权归作者所有

共有 人打赏支持
D
粉丝 0
博文 18
码字总数 4127
作品 0
细谈发红包程序-----我的启示录

现在是网络时代,逢年过节用手机发红包支付的网站也很多,想电脑爱好者网站,PHP开发的CMS,当然还有pig cms,thinkcms等,都支持微信红包支付。 其微信现金红包接口API开发原理: 红包发放说明...

crossmix
2016/01/01
2K
0
微信公众平台开发(111) 现金红包、裂变红包、企业付款

在这篇微信公众平台开发教程中,我们将介绍如何在实现现金红包、裂变红包、企业付款以及红包交易查询(含现金红包和裂变红包)和企业付款查询的功能。 本文分为以下二个部分: 微信支付接口S...

bengozhong
2016/03/19
220
0
微信红包的随机算法

有人问过微信的人,大致是这样: public static double getRandomMoney(LeftMoneyPackage _leftMoneyPackage) { // remainSize 剩余的红包数量 // remainMoney 剩余的钱 if (_leftMoneyPack......

背锅侠
2016/02/17
566
0
微信红包的随机算法是怎样实现的?

摘自知乎 ,答案来自:https://www.zhihu.com/question/22625187/answer/85530416 答案来自:https://www.zhihu.com/question/22625187/answer/85530416 有人问过微信的人,大致是这样: 先上...

北极之北
2016/02/23
1K
3
微信支付-微信红包Java版本

扫描可以关注查看其它接口的demo效果 https://zb.oschina.net/market/opus/1325c0ab3ac1f4b6 代码链接,可根据需求出方案与代码。 需要有认证的公众号,且开通了微信支付,商户平台且开通了现...

小帅帅丶
2016/08/22
6.7K
16

没有更多内容

加载失败,请刷新页面

加载更多

打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
3
0
搞定Northwind示例数据库,无论哪个版本的SQLServer都受用

Northwind数据库 从这里可以找到突破口: http://social.msdn.microsoft.com/Forums/zh-CN/Vsexpressvb/thread/8490a1c6-9018-40c9-aafb-df9f79d29cde 下面是MSDN: http://msdn2.microsoft......

QQZZFT
昨天
1
0
mysql主从同步,安装配置操作

准备 两台mysql服务,我这里准备了如下: 主库:192.168.176.128 从库:192.168.176.131 如何在Linux上安装mysql服务,请看https://blog.csdn.net/qq_18860653/article/details/80250499 操作...

小致dad
昨天
3
0
一个手机装天下,走遍中国都不怕!

导读 “1200元(人民币,下同),微信支付,可以,你扫我。”来自西非马里共和国的展商Albert拿着手机,和一位买走他手鼓的中国游客用简单的汉语交流着。 近日,“第十四届中俄蒙经贸洽谈暨商品...

问题终结者
昨天
2
0
Redis的“死键”问题

大规模的数据库存储系统中,数据的生命周期管理是很有必要的;从业务角度发现过期数据,数据归档和数据碎片整理等。以MySQL为例,1个运行很久的TB级MySQL实例中,极有可能数百GB的数据,对业...

IT--小哥
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部