/*
准备:
1、公众号绑定小程序号;
2、注册一个开放平台,并将小程序和公众号绑定在同一个开放平台账号下;(文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1499332673_Unm7V)
3、官方卡券常见问题文档:https://developers.weixin.qq.com/community/develop/doc/000840ffeb0660526067be8ce5b408?highLine=%25E5%25B0%258F%25E7%25A8%258B%25E5%25BA%258F%25E5%258D%25A1%25E5%2588%25B8%25E7%25AD%25BE%25E5%2590%258D%25E9%2594%2599%25E8%25AF%25AF
4、官方卡券签名生成算法文档(见附录4-卡券扩展字段及签名生成算法):
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
*/
//小程序代码:
//index.wxml
<button bindtap="getCard">领卡</button>
//index.js
Page({
data: {},
getCard:function(){
var timestamp = (Date.parse(new Date()) / 1000).toString();
var cardId = "pp42H1eeHts9WQfQcFc6MRd-Srbw";//卡券id,在公众号卡券详情里获得
var nonce_str = Math.floor(Math.random() * 10) + "abc123";
var pushData = { timestamp: timestamp, cardId: cardId, nonce_str: nonce_str};
wx.request({
url: 'http://192.168.1.139:60005/wxMemberCard/CardSign',
data: pushData,
header: { 'content-type': 'application/json' },
success(res) {
var signature = res.data;
wx.addCard({
cardList: [
{
cardId: cardId,
cardExt: '{"nonce_str": "' + nonce_str + '", "timestamp": "' + timestamp + '", "signature":"' + signature + '"}'
}
],
success: function (res) {
console.log(res.cardList)
}
})
}
})
}
})
//后端代码:
public string CardSign()
{
var appid = "wx907acf15e7f59a23";//公众号的appid,不是小程序的
var secret = "2a951174350e17711f3c60245f8aa84t";//公众号的secret
var url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}";
var result = new WebUtils().DoGet(url, null); //WebUtils类在附件
var access_token = JObject.Parse(result).GetValue("access_token").ToString();
url = $"https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={access_token}&type=wx_card";
result = new WebUtils().DoGet(url, null);
var api_ticket = JObject.Parse(result).GetValue("ticket").ToString();
var cardId = Request.QueryString["cardId"];
var timestamp = Request.QueryString["timestamp"];
var nonce_str = Request.QueryString["nonce_str"];//微信文档说这个非必传,但不传的话会报签名错误
List<string> list = new List<string>() { api_ticket, timestamp, nonce_str, cardId };
list.Sort();//按字典排序,微信的卡券签名校验工具的排序是错的[2019-01-28]。
var signStr = string.Join("", list);
var sign = BitConverter.ToString(System.Security.Cryptography.SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(signStr))).Replace("-", "").ToLower();
return sign;
}

果皮11
- 粉丝: 1
最新资源
- 记录个人在计算机视觉-AU335-1课程所完成的lab和大作业
- 计算机视觉学习过程中的实战项目代码仓库
- 基于搜索的软件工程:SSBSE 2021会议精选
- 个人在计算机视觉 - AU335-1 课程中完成的 lab 与大作业记录 个人完成计算机视觉 - AU335-1 课程 lab 及大作业情况记录 计算机视觉 - AU335-1 课程个人所完成 lab
- 19幅图解RAID,从入门到精通,一文读懂存储技术RAID技术详解与选择指南:涵盖RAID级别、硬件与软件RAID、缓存技术及新形态RAID卡的应用场景
- CSDN 学院计算机视觉课程的代码实现示例
- 基于搜索的软件工程前沿进展
- 此仓库存储我在学习计算机视觉时做的实战项目代码
- 此仓库存储我在学习计算机视觉时做的实战项目代码
- 基于深度学习与计算机视觉的 YOLO 大作业设计与实现
- MobaXterm 专业版本工具
- PHP, MySQL和Apache全一册:Web开发入门与实践
- 2021年新版市级、县级国土空间规划用地用海制图规范符号库,直接使用,很方便
- 计算机视觉课程代码实现 - CSDN学院
- opencv-python-headless-4.11.0.86-cp37-abi3-win-amd64.whl
- 【航空航天材料工程】MMPDS-08金属材料性能标准化手册:室温和高温机械性能数据分析与应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


