1)首先是官方接口文档:

  1、批量添加卡券接口:https://mp.weixin.qq.com/wiki?action=doc&id=mp1421141115&t=0.08619731531288366&token=&lang=zh_CN#wxkq3 ;

  2、卡券扩展字段cardExt说明:https://mp.weixin.qq.com/wiki?action=doc&id=mp1421141115&t=0.08619731531288366&token=&lang=zh_CN#fl4

2)坑一:接入准备

  1、需要在微信公众号平台里配置“JS接口安全域名”,位置:公众号设置-》功能设置-》JS接口安全域名;

  2、配置“网页授权域名”(获取openid时需要用到,怎么获取这里就不说了),位置同上:公众号设置-》功能设置-》网页授权域名

3)坑二:api_ticket、signature

  1、添加卡券需要的api_ticket和signature(签名),和默认的 jsapi_ticket、signature 都不同,最坑的是,官方的jssdk里还没相关的demo,所以要自己写,获取方法如下:

  

  整合进jssdk.php,大概是这样子

  public function getWxCardApiTicket(){
// api_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
$data = json_decode($this->get_php_file("wxcard_api_ticket.php"));
if ($data->expire_time < time()) {
$accessToken = $this->getAccessToken();
// 如果是企业号用以下 URL 获取 ticket
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$accessToken}&type=wx_card";
$res = json_decode($this->httpGet($url));
$ticket = $res->ticket;
if ($ticket) {
$data->expire_time = time() + 7000;
$data->api_ticket = $ticket;
$this->set_php_file("wxcard_api_ticket.php", json_encode($data));
}
} else {
$ticket = $data->api_ticket;
} return $ticket;
}

  2、卡券签名大概是这样子,根据自己项目的逻辑异步请求计算签名(假设是xxx.php)

$jssdk      = new JSSDK("appId", "appSecret");
$api_ticket = $jssdk->getWxCardApiTicket();

$code = '';
$arr = array($api_ticket, $code, $_GET['timestamp'], $_GET['nonceStr'], $_GET['card_id'], $_SESSION['openid']);
sort($arr, SORT_STRING); $signature = sha1(implode($arr)); echo json_encode(array('signature'=>$signature));
exit;

签名验证、对比工具:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=cardsign

4)坑四:js配置

  1、js的config配置(jsApiList)需要添加 'addCard';

  2、addCard方法里的cardExt里需要 'nonce_str' 参数(官方的demo.js里并没有nonce_str参数,但亲测没这个参数会报签名错误!);

  3、cardExt里参数和要后台计算签名的参数保持一致(时间戳也要保持一致);

使用card_id异步计算签名并调用添加卡券方法的示例:

function addCard(card_id){
var data={'opendid':'<{$smarty.session.openid}>','card_id':card_id,'timestamp':'<?php echo $signPackage["timestamp"];?>','nonceStr':'<?php echo $signPackage["nonceStr"];?>'};
$.get('xxxx.php',data,function(res){
wx.addCard({
cardList: [
{
cardId: card_id,
cardExt: '{"code":"", "openid": "<{$smarty.session.openid}>", "nonce_str":"<?php echo $signPackage["nonceStr"];?>","timestamp": "<?php echo $signPackage["timestamp"]; ?>", "signature":"'+res.signature+'"}'
}
],
success: function (res) {
alert('已添加卡券:' + JSON.stringify(res.cardList));
},
cancel: function (res) {
alert(JSON.stringify(res))
}
});
},'json');
}

5)坑五:注意变量名大小写,有无下划线等等

微信jssdk批量添加卡券接口(踩坑经验)的更多相关文章

  1. 微信jssdk批量添加卡券接口

    1)首先是官方接口文档: 1.批量添加卡券接口:https://mp.weixin.qq.com/wiki?action=doc&id=mp1421141115&t=0.0861973 ...

  2. 微信小程序之mpvue+iview踩坑之旅

    因为之前参照微信的原生的文档写过一些小程序的demo,写的过程比较繁琐,后来出了美团的mpvue,可以直接使用vue开发,其他的不作对比,这篇文章记录一下踩坑之旅. 参照mpvue http://mp ...

  3. 微信小程序性能测试之jmeter踩坑秘籍(前言)

    最近要做个微信小程序的性能压测,虽然之前只做过web端的,但想一想都是压后端的接口,所以果断答应了下来,之前对jmeter都是小打小闹,所以趁着这次机会好好摆弄摆弄. ---------------- ...

  4. 微信小程序之蓝牙 BLE 踩坑记录

    前言 前段时间接手了一个微信小程序的开发,主要使用了小程序在今年 3 月开放的蓝牙 API ,此过程踩坑无数,特此记录一下跳坑过程.顺便开了另一个相关的小项目,欢迎 start 和 fork: BLE ...

  5. Go“一个包含nil指针的接口不是nil接口”踩坑

    最近在项目中踩了一个深坑--"Golang中一个包含nil指针的接口不是nil接口",总结下分享出来,如果你不是很理解这句话,那推荐认真看下下面的示例代码,避免以后写代码时踩坑. ...

  6. k8s删除节点后再重新添加进去(踩坑)

    开启本地集群,发现一台节点出问题了,想删除再换一台节点,结果就踩坑了,还好本地有好几套环境. 再master节点执行以下命令 [root@k8s-master ~]# kubectl drain k8 ...

  7. 微信jssdk批量展示卡包中的卡券

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  8. 微信小程序添加卡券到微信卡包,使用wx.addCard()方法传参及整体流程

    一.准备: 1.经微信认证过的微信公众号. 2.经微信认证过的微信小程序号. 先来看看微信小程序官方的文档,https://developers.weixin.qq.com/miniprogram/d ...

  9. 调用微信扫一扫功能,踩坑'invalid signature'

    在vue项目中,调用微信扫一扫功能,在安卓系统下完全正常,ios系统下却报错'invalid signature'的错误,这可能令许多小伙伴困惑,经过查询大量博客相关资料,才找到了解决的方法. 原因: ...

随机推荐

  1. 安装grub到U盘

    转自:http://hi.baidu.com/leeagle/item/6d022afc64bf7f5ec8f33743 安装GRUB到U盘 关键的几步是:3.激活/dev/sdb2 ,这步很重要,如 ...

  2. RTX——第16章 消息邮箱

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 前面几个章节主要给大家讲解了任务间的同步和资源共享机制,本章节为大家讲解任务间的通信机制消息邮箱,RTX ...

  3. iosxcode7以后免证书真机测试方法如下

    步骤比较简单,我就简单总结一下. 1. 进入xcode,菜单栏选择xcode –> preferences (快捷键 command + ,)在Accounts选项卡添加自己的Apple ID ...

  4. 应聘Java笔试时可能出现问题及其答案

    有感:应聘Java笔试时可能出现问题及其答案 huij 前段时间因为要参加一个笔试,在准备期间在网上找到了两条关于笔试题目的文章,其中一篇为<<有感:应聘Java笔试时可能出现问题> ...

  5. 一款基于jquery固定于顶部的导航

    今天给大家分享一款基于jquery固定于顶部的导航,这款导航当浏览器滚动条位于顶部时,导航高度较高,当浏览器滚动向下滚动时,导航高度自动减低,并位于顶部.效果图如下: 在线预览   源码下载 实现的代 ...

  6. Java中HashMap实现原理

    类声明: 概述: 线程不安全: <Key, Value>两者都可以为null: 不保证映射的顺序,特别是它不保证该顺序恒久不变: HashMap使用Iterator: HashMap中ha ...

  7. Linux下安装rpm出现error: Failed dependencies

    在Linux下安装rpm包时经常会遇到下面这个问题: error: Failed dependencies: xxxxxxxxxxxxxxxxxxxxxx 遇到此问题时可以在安装rpm包命令的后面加两 ...

  8. Testng 的数据源 驱动測试 代码与配置

    JUnit中有讲述使用注解的方式进行数据源读取进行自己主动循环測试的方法,在TestNG中也提供了对应的方法 public class TestngDataProvider { /** * 数组内的每 ...

  9. PixelMatorPro快捷键大全(osx)

    Keyboard Shortcuts Navigate an image   Zoom in Command-Plus (+) Zoom out Command-Minus (-) Zoom to f ...

  10. Java-jdbc连接简化类jdbcUtil

    在src文件夹下创建配置文件 db.properties db.properties drivername=com.mysql.jdbc.Driver url=jdbc:mysql://localho ...