文档章节

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

D
 DailyDiary
发布于 2017/05/12 18:23
字数 540
阅读 14
收藏 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
浅析微信支付:商户平台开通现金红包、指定用户发放、红包记录查询

本文是【浅析微信支付】系列文章的第十三篇,主要讲解在如何开通商户平台的红包功能和为用户发放红包,以及查询发送红包记录。 ------------------- 浅析微信支付系列已经更新十三篇了哟~,...

YClimb
11/16
0
0
微信红包的随机算法

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

背锅侠
2016/02/17
566
0
微信支付现金红包接口

微信红包SDK 现金红包、裂变红包、企业付款本质均为商户和用户之间的转账,微信官方定义其接口时,操作方法类似。 1. 请求URL 现金红包 裂变红包 企业付款 2. 参数说明 字段名 变量名 必填 ...

小帅帅丶
2016/08/23
7
0

没有更多内容

加载失败,请刷新页面

加载更多

jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
3
0
cookie与session详解

session与cookie是什么? session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时...

士兵7
今天
3
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部