文档章节

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

D
 DailyDiary
发布于 2017/05/12 18:23
字数 540
阅读 4
收藏 0
点赞 0
评论 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
博文 17
码字总数 4127
作品 0
细谈发红包程序-----我的启示录

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

crossmix ⋅ 2016/01/01 ⋅ 0

微信公众平台开发(111) 现金红包、裂变红包、企业付款

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

bengozhong ⋅ 2016/03/19 ⋅ 0

微信红包的随机算法

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

背锅侠 ⋅ 2016/02/17 ⋅ 0

微信红包的架构设计简介

微信红包的架构设计简介 @来源于QCon某高可用架构群整理,整理by朱玉华。 背景:有某个朋友在朋友圈咨询微信红包的架构,于是乎有了下面的文字(有误请提出,谢谢) 概况:2014年微信红包使用...

天天顺利 ⋅ 2015/05/04 ⋅ 0

微信红包的随机算法是怎样实现的?

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

北极之北 ⋅ 2016/02/23 ⋅ 3

微信支付-微信红包Java版本

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

小帅帅丶 ⋅ 2016/08/22 ⋅ 16

微信红包指定总金额随机生成每个红包金额算法

红包生成算法的需求 预先生成所有的红包还是一个请求随机生成一个红包 简单来说,就是把一个大整数m分解(直接以“分为单位,如1元即100)分解成n个小整数的过程,小整数的范围是[min, max]。...

武当剑客 ⋅ 2015/11/24 ⋅ 1

微信红包金额分配的算法

以下内容转载自网络,仅供学习和吐槽 虽然春节已经过去一段时间,但不少微信群里面依旧乐此不疲的在玩发红包活动,用户自发的将最初的一个春节拜年的场景功能慢慢演化成一个长尾功能。 用户在...

李朝强 ⋅ 2016/05/31 ⋅ 0

秒杀 计数器 直播--php 实现数据库连接池、直播平台

yaf项目快速开发(兼容php7): yaf project rapid development, integration of the db action class support chain operation, support separate read and write, pdo, mysqli, mongo, up......

qieangel ⋅ 2015/09/07 ⋅ 3

微信开发之发红包

微信开发之发红包 http://mch.weixin.qq.com/wiki/doc/api/cashcoupon.php?chapter=135 把下面这堆xml 以post请求方式 提交到https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack......

samuel2012 ⋅ 2015/10/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

windows profesional 2017 build problem

.net framework .... https://stackoverflow.com/questions/43330915/could-not-load-file-or-assembly-microsoft-build-frameworkvs-2017...

机油战士 ⋅ 19分钟前 ⋅ 0

python3中报错的解决方法(长期更新)

1、ImportError: No module named ‘DjangoUeditor’ 出错原因:安装DjangoUeditor库适用于python2,需要下载适用python3的 下载地址:https://github.com/twz915/DjangoUeditor3 2、python3......

xiaoge2016 ⋅ 24分钟前 ⋅ 0

数据结构与算法之双向链表

一、双向链表 1.双向链表的结点结构 typedef struct DualNode{ ElemType data; struct DualNode *prior; // 前驱结点 struct DualNode *next; // 后继结点}DualNode, *DuL...

aibinxiao ⋅ 44分钟前 ⋅ 0

五大最核心的大数据技术

大数据技术有5个核心部分,数据采集、数据存储、数据清洗、数据挖掘、数据可视化。关于这5个部分,有哪些核心技术?这些技术有哪些潜在价值?看完今天的文章就知道了。 大数据学习群:7165810...

董黎明 ⋅ 45分钟前 ⋅ 0

PhpStorm 头部注释、类注释和函数注释的设置

首先,PhpStorm中文件、类、函数等注释的设置在:setting-》Editor-》FIle and Code Template-》Includes下设置即可,其中方法的默认是这样的: /**${PARAM_DOC}#if (${TYPE_HINT} != "v...

nsns ⋅ 45分钟前 ⋅ 0

spring.net AOP

http://www.springframework.net/doc-latest/reference/html/aop-quickstart.html https://www.cnblogs.com/wujy/archive/2013/04/06/3003120.html...

whoisliang ⋅ 50分钟前 ⋅ 0

【HAVENT原创】创建 Dockerfile 生成新的镜像,并发布到 DockerHub

注意:Win7 与 Win10 的版本存在差异,Win7 版本使用 Docker Quickstart Terminal 进入控制台,Win10下面直接用管理员权限打开控制台或者 PowerShell 即可;另外 Win7 下面只能访问 C盘,/ap...

HAVENT ⋅ 50分钟前 ⋅ 0

pom.xml出现web.xml is missing ...解决方案

提示信息应该能看懂。也就是缺少了web.xml文件,<failOnMissingWebXml>被设置成true了。 搜索了一下,Stack Overflow上的答案解决了问题,分享一下。 目前被顶次数最多的回答原文如下: This...

源哥L ⋅ 51分钟前 ⋅ 0

js时间戳与日期格式之间相互转换

1. 将时间戳转换成日期格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // 简单的一句代码 var date = new Date(时间戳); //获取一个时间对象 /** 1. 下面是获取时间日期的方法,需要什么样的格式自己...

Jack088 ⋅ 56分钟前 ⋅ 0

web添加log4j

添加xml配置log4j.properties # Global logging configuration---root日志设置#log4j.rootLogger=info,dailyRollingFile,stdoutlog4j.rootLogger=debug,stdout,dailyRollingFile---......

黄柳淞 ⋅ 57分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部