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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_29057491/article/details/72763690

第一:需要一张微信公众平台创建好了的卡券(注意:卡券有效期和库存)
第二:获取微信 “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("网络错误");
                                }
                            });
展开阅读全文

没有更多推荐了,返回首页