JAVA调用微信投放卡券——HTML5线上发券(JS-SDK接口)

来源:互联网 发布:tcp监听端口阻塞 编辑:程序博客网 时间:2024/05/17 01:17

第一:需要一张微信公众平台创建好了的卡券(注意:卡券有效期和库存)
第二:获取微信 “api_ticket” 获取的接口是url=”https://api.weixin.qq.com/cgi- bin/ticket/getticket?access_token=TOKEN&type=wx_card”
第三:js调用接口 引入下面两个JS文件。

wx.addCard({    cardList: [{        cardId: '',        cardExt: ''    }], // 需要添加的卡券列表    success: function (res) {        var cardList = res.cardList; // 添加的卡券列表信息    }});

获取api_ticket就是请求https://api.weixin.qq.com/cgi- bin/ticket/getticket?access_token=“这里放的是access_token”&type=wx_card 前面的文章有讲如何获取access_token。获取api_ticket方式和获取access_token差不多。就不说怎么获取了
例(假如这是我们获取到的api_ticket ):
api_ticket = “123456789”

/**     * 获取投放的微信卡券签名     */    @SuppressWarnings("deprecation")    public static String getWxSingature(String timestamp, String nonceStr, String url, String cardid, String openid) {        String singature = null;        if (ticket.isAvailable()) {            String ticketStr = api_ticket ;//这里的api_ticket就是上面举例的            ArrayList<String> list = new ArrayList<String>();            list.add(ticketStr);            list.add(timestamp);            list.add(nonceStr);            list.add(cardid);            list.add(openid);            Collections.sort(list);            String aa = timestamp + ticketStr + nonceStr + openid + cardid;            MessageDigest md = null;            try {                md = MessageDigest.getInstance("SHA-1");            } catch (Exception e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            // SHA1签名生成            md.reset();            md.update(aa.getBytes());            singature = DigestUtils.shaHex(list.get(0) + list.get(1) + list.get(2) + list.get(3) + list.get(4));// byteToHex(digest);        }        return singature;    }

页面AJAX请求,进入当前方法

/** 发卡券 */    public void index() throws Exception {        String openid = getOpenId();//获取OPENID。        Map<String, String> map = new HashMap<String, String>();        // 随机字符串        String nonceStr = create_nonce_str();        //卡券ID         String cardId = "********************";        //时间戳        long time = System.currentTimeMillis() / 1000;        String timestamp = Long.toString(time);        String signType = "SHA1";//加密方式        //在此处就是调用了文章上面的那个方法        String signature= JsApi.getWxSingature(timestamp, nonceStr,url,cardId,openid);        System.out.println("签名串"+signature);        map.put("cardId", cardId);        map.put("timestamp", timestamp);        map.put("nonceStr", nonceStr);        map.put("signType", signType);        map.put("signature", signature);        map.put("openid", openid);        map.put("appId", "*************");        renderJson(map);    }     /**      * 产生随机串--由程序自己随机产生      * @return      */      private static String create_nonce_str() {          return UUID.randomUUID().toString();      }

这里是页面的AJAX请求

$("#lingqu").click(function(){    $.ajax({        type: "GET",        url: "/*****/front/card/index",        async: true,        dataType: "json",        data: "",        success: function(data){            wx.addCard({                cardList: [{                    cardId: data.cardId,                    cardExt: '{"code":"", "openid": "'+data.openid+'", "nonce_str":"'+data.nonceStr+'","timestamp": "'+data.timestamp+'", "signature":"'+data.signature+'"}'                }], // 需要添加的卡券列表                success: function (res) {                    var cardList = res.cardList; // 添加的卡券列表信息                }            });        }    })})

就完了,这里就是调起让客户领取卡券的页面,客户领取或者不领取会返回参数。
下面是导入的所有jar

import java.util.HashMap;import java.util.Map;import java.util.UUID;import java.security.MessageDigest;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import org.apache.commons.codec.digest.DigestUtils;import com.jfinal.kit.HttpKit;

有什么不明白的QQ“767604112”
这里写图片描述

特别备注:微信卡券调起成功后,领取至卡包,返回领取状态,alert();打印不出来。这种情况,其实你的alert执行了,领取至卡包时候就执行了,建议使用跳转来链接验证是否执行。判断状态

wx.addCard({                                cardList: [{                                    cardId: data.cardId,                                    cardExt: '{"code":"","openid": "'+data.openid+'", "nonce_str":"'+data.nonceStr+'","timestamp": "'+data.timestamp+'", "signature":"'+data.signature+'"}'                                }], // 需要添加的卡券列表                                success: function (res){                                    if(res.isSuccess=true){                                        location.hre="http://www.baidu.com";                                        var code=res.cardList[0].code;                                        $("#wowow").html(code+"===="+card);                                    }                                },                                cancel:function(res){                                    alert("未领取");                                },                                fail:function(res){                                    alert("网络错误");                                }                            });
原创粉丝点击