您的位置:首页 > 移动开发 > 微信开发

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

2017-05-26 09:57 691 查看
第一:需要一张微信公众平台创建好了的卡券(注意:卡券有效期和库存)

第二:获取微信 “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("网络错误");
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  html5 java api 微信