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,大概是这样子

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

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

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

  3. $code = '';
  4. $arr = array($api_ticket, $code, $_GET['timestamp'], $_GET['nonceStr'], $_GET['card_id'], $_SESSION['openid']);
  5. sort($arr, SORT_STRING);
  6.  
  7. $signature = sha1(implode($arr));
  8.  
  9. echo json_encode(array('signature'=>$signature));
  10. 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异步计算签名并调用添加卡券方法的示例:

  1. function addCard(card_id){
  2. var data={'opendid':'<{$smarty.session.openid}>','card_id':card_id,'timestamp':'<?php echo $signPackage["timestamp"];?>','nonceStr':'<?php echo $signPackage["nonceStr"];?>'};
  3. $.get('xxxx.php',data,function(res){
  4. wx.addCard({
  5. cardList: [
  6. {
  7. cardId: card_id,
  8. cardExt: '{"code":"", "openid": "<{$smarty.session.openid}>", "nonce_str":"<?php echo $signPackage["nonceStr"];?>","timestamp": "<?php echo $signPackage["timestamp"]; ?>", "signature":"'+res.signature+'"}'
  9. }
  10. ],
  11. success: function (res) {
  12. alert('已添加卡券:' + JSON.stringify(res.cardList));
  13. },
  14. cancel: function (res) {
  15. alert(JSON.stringify(res))
  16. }
  17. });
  18. },'json');
  19. }

微信jssdk批量添加卡券接口的更多相关文章

  1. 微信jssdk批量添加卡券接口(踩坑经验)

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

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

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

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

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

  4. 微信公众平台开发 微信JSSDK开发

    根据微信开发文档步骤如下: 1.先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. JS接口安全域名设置 mi.com(前面不用带www/http,域名必须备案过) 2.引 ...

  5. 微信JS-SDK

    <div class="lbox_close wxapi_form"> <h3 id="menu-basic">基础接口</h3& ...

  6. 微信JS-SDK说明文档及常见问题处理

    概述 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微 ...

  7. 微信jssdk分享功能开发

    先理解下分享: 在app端 ,经常能看见 分享按钮的功能,(分享给朋友,分享到朋友圈,分享到QQ空间等等): https://open.weixin.qq.com/(微信开发平台),这需要到开放平台注 ...

  8. 微信JS-SDK文档

    微信JS SDK 调用详解   微信JS SDK 调用详解... 1 概述... 2 使用说明... 2 接口调用说明... 4 基础接口... 4 判断当前客户端版本是否支持指定JS接口... 5 ...

  9. 【微信公众平台开发】微信JS-SDK开发,信公众平台js-sdk

    根据微信开发文档步骤如下: 1.先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. JS接口安全域名设置 mi.com(前面不用带www/http,域名必须备案过)   2 ...

随机推荐

  1. VS2012调用64位IIS Express

    在注册表键HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\WebProjects下添加DWORD "Use64BitIISExp ...

  2. [NLP] TextCNN模型原理和实现

    1. 模型原理 1.1 论文 Yoon Kim在论文(2014 EMNLP) Convolutional Neural Networks for Sentence Classification提出Te ...

  3. 简单介绍Spring的ContextLoaderListener

    在开发Spring的Web项目中,通常我们都会在web.xml中配置一个Spring的核心监听器,就是把Spring的IOC容器纳入Servlet容器中,配置如下: <listener> ...

  4. HDU 4619 Warm up 2 贪心或者二分图匹配

    给同一张横着的牌的所在的格子编同一样的号,这些格子对应x集合,给同一张竖着的牌所在的格子编同一样的号,对应y集合,同一个格子上既有横着的牌又有竖着的牌,那么就建一条边,有冲突就要拿走一张,结果是总的牌 ...

  5. (2)流程控制(for循环、if...else判断、while循环)

    for循环 for item in names:  #结构语法 print(item) for循环嵌套for循环 for循环配合range()可以直接指定要打印的数量 例:打印一个金字塔 for i ...

  6. js 命名空间

        yui的命名空间和继承机制 var YAHOO = window.YAHOO || {};YAHOO.namespace = function(ns) {    if (!ns || !ns. ...

  7. TensorFlow笔记-07-神经网络优化-学习率,滑动平均

    TensorFlow笔记-07-神经网络优化-学习率,滑动平均 学习率 学习率 learning_rate: 表示了每次参数更新的幅度大小.学习率过大,会导致待优化的参数在最小值附近波动,不收敛:学习 ...

  8. Entity Framework常用的查询方式

    Entity Framework支持的查询方式有三种 LINQ to Entities Entity SQL Native SQL [LINQ to Entities] LINQ(语言集成查询)是从V ...

  9. 完成分析 FastAdmin 用户余额功能(后台篇)

    分析 FastAdmin 用户余额功能(后台篇) 分析 FastAdmin 用户余额功能(后台篇) 虽然 FastAdmin 主要针对后台的框架,但也在不断完善前台的功能,有一天小伙伴在社区里提了一个 ...

  10. Spring本质-AOP

    一.我们在做系统设计的时候,一个非常重要的工作就是把一个大系统做分解, 按业务功能分解成一个个低耦合.高内聚的模块,就像这样: 但是分解以后就会发现有些很有趣的东西, 这些东西是通用的,或者是跨越多个 ...