请选择 进入手机版 | 继续访问电脑版
查看: 1152|回复: 7

小程序卡券开发分享

[复制链接]

1306

主题

1306

帖子

4336

积分

超级版主

Rank: 8Rank: 8

积分
4336
发表于 2017-9-27 09:44:23 | 显示全部楼层 |阅读模式
想请教下小程序卡券开发事宜,无奈设计卡券开发的实战太少,我就自己研究了下,现在分享下自己的代码~~~


一 、 开发小程序卡券的前提是:

1、小程序和公众号有绑定
2、小程序和该公众号需要绑定到同一个开放平台下(http://open.weixin.qq.com
3、公众号开通微信卡券功能

二 、 准备工作做好后,开始第一步讲微信卡券升级成小程序卡券

小程序&卡券打通

1 打通主要支持特性
支持在小程序中领取/查看/使用公众号AppId创建的会员卡、票、券(含通用卡)。
注:创建卡券部分可见卡券接口文档。

2 商家需要做什么

2.1. 需在open平台绑定公众号AppId与小程序AppId,详情查看https://open.weixin.qq.com/cgi-b ... 0&lang=zh_CN&token=
2.2. 原卡券中配置的自定义外链基础上新增一组小程序页面配置字段,支持将卡券内链接升级为小程序;
2.3. 以小程序AppId调用添加/查看卡券JS-API,签名参数与公众号Addcard/Opencard JS-SDK一致;
2.4. 核销卡券、数据查看保持现网路径,商家无需调整。

3 商家接入落地的接口内容
3.1. 创建接口/更新卡券信息接口base_info中新增进入小程序页面字段,商家需将小程序字段配置进原自定义外链结构体中,小程序页面新增字段示例如下:

  1. { "card": {
  2.     "card_type": "MEMBER_CARD",
  3.     "member_card": {
  4.         "base_info": {
  5.             "custom_url_name": "立即使用",
  6.             "custom_url": "http://www.qq.com",
  7.             "custom_app_brand_user_name": "gh_86a091e50ad4@app",
  8.             "custom_app_brand_pass":"API/cardPage",
  9.             "custom_url_sub_title": "6个汉字tips",
  10.             "promotion_url_name": "更多优惠",
  11.           "promotion_url": "http://www.qq.com",
  12.             "promotion_app_brand_user_name": "gh_86a091e50ad4@app",
  13.             "promotion_app_brand_pass":"API/cardPage"        }
  14.         }
  15. }
复制代码
文档中讲的是模棱两可,总结下来就是需要我们在创建微信卡券的时候,需要添加个自定义外链,并且我们领取一张卡券,通过卡券上的那个自定义外链访问完成小程序卡券升级!

1、我图省事就在公众号后台创建卡券了并添加那个升级字段的链接



2、创建完成后通过卡券二维码扫码领取这张卡券,并点击上一步设置的入口,去升级微信卡券到小程序卡券!
3、第一步设置的那个自定义字段访问链接内的代码如下(我通过PHP实现的)
字段说明可看:https://mp.weixin.qq.com/cgi-bin ... ng=zh_CN&platform=2

  1. //小程序卡券
  2.         public function doMobileWxapp(){
  3.                 global $_W,$_GPC;
  4.                 load()->classs('weixin.account');
  5.                 load()->func('communication');
  6.                 $cardid = $_GPC['card_id'];
  7.                 $access_token = WeAccount::token();
  8.                 $post = '{
  9.                                 "card_id":"' . $cardid . '",
  10.                                 "general_coupon": {
  11.                                         "base_info": {
  12.                                                 "custom_url_name": "小程序",
  13.                                                 "custom_url": "http://www.qq.com",
  14.                                                 "custom_app_brand_user_name": "gh_05c38bf33b51@app",
  15.                                                 "custom_app_brand_pass":"pages/index/index",
  16.                                                 "custom_url_sub_title": "点击进入",
  17.                                                 "promotion_url_name": "更多信息",
  18.                                                 "promotion_url": "http://www.qq.com",
  19.                                                 "promotion_app_brand_user_name": "gh_05c38bf33b51@app",
  20.                                                 "promotion_app_brand_pass":"pages/index/index"
  21.                                         }
  22.                                 }
  23.                 }';
  24.                 $url = "https://api.weixin.qq.com/card/update?access_token={$access_token}";
  25.                 $res = ihttp_post($url, $post);
  26.                 $res = json_decode($res['content'],true);
  27.                 var_dump($res);die();
  28.                 include $this->template('wxapp');
  29.         }
复制代码
4、完成卡券升级后,开始小程序里做领取卡券(通过wx.addCard(OBJECT))
领取/查看卡券的接口参数不变,以小程序的AppId调用JSSDK,填入公众号AppId下的参数


官方文档是这么一句话说的,我上午以为小程序可以调用jssdk了呢,埋头研究发现不行,其实这里根本不需要什么JSSDK,就是通过公众号的参数来生成小程序卡券的签名字段!
需要注意的是,这里生成卡券签名需要用到用户在小程序下的openID,(具体文档可以查看微信JSSDK卡券添加https://mp.weixin.qq.com/wiki/11 ... 8.E6.8E.A5.E5.8F.A3
贴代码(代码略乱)
小程序端代码:

先拿到openID

  1. //方法
  2.   wxapplogin: function() {
  3.     wx.showLoading({ title: '登录中……', mask: true });
  4.     var that = this;
  5.     wx.login({
  6.           success: function(res) {
  7.                 wx.hideLoading();
  8.                 if (res.code) {
  9.                   //发起网络请求获取openID
  10.                   wx.request({
  11.                         url: '',
  12.                         data: {
  13.                           code: res.code
  14.                         },
  15.                         header: { 'content-type': 'application/json' },
  16.                         success: function(res) {
  17.                                 var result = res.data;
  18.                                 that.setData({
  19.                                         result : result
  20.                                 })
  21.                                 if(result.code == '404'){
  22.                                         wx.showLoading({ title: result.msg, mask: true });
  23.                                 }
  24.                                 console.log('获取' + result.code + result.openid + '会话session_key:' + result.session_key)
  25.                         }
  26.                   })
  27.                 } else {
  28.                   console.log('获取用户登录态失败!' + res.errMsg)
  29.                 }
  30.                 wx.getUserInfo({
  31.                         success: function (res) {
  32.               that.setData({
  33.                                         userInfo : res.userInfo
  34.                                 })
  35.             }
  36.                 })
  37.           }
  38.         })
  39.   },
复制代码
接着服务器端生成小程序卡券的签名参数

  1. public function doMobileGetuserid(){
  2.                 global $_W,$_GPC;
  3.                 //小程序参数
  4.                 $appid = $this->module['config']['appid'];
  5.                 $appkey = $this->module['config']['key'];
  6.                 $code = $_GPC['code'];
  7.                 file_put_contents(IA_ROOT . "/addons/api4.log", $code . PHP_EOL, FILE_APPEND);
  8.                 if(empty($code)){
  9.                         $this->returnMsg(array('msg'=>'code接收失败','code'=>'404'));
  10.                 }
  11.                 $userdata = $this->getuserinfo($appid,$appkey,$code);
  12.                 if($userdata){
  13.                         $this->returnMsg(array('msg'=>'openid换取成功','code'=>'101','openid'=>$userdata['openid'],'session_key'=>$userdata['session_key']));
  14.                 }
  15.         }
  16.         public function returnMsg($msg = '') {
  17.         $data = array(
  18.             'msg' => $msg['msg'],
  19.                         'code' => $msg['code'],
  20.                         'openid' => $msg['openid'],
  21.                         'cardArray' => $msg['cardArray'],
  22.                         'session_key' => $msg['session_key'],
  23.         );
  24.         die(json_encode($data));
  25.     }
  26.         public function doMobileGetappcard(){
  27.                 global $_W,$_GPC;
  28.                 $openid = $_GPC['openid'];
  29.                 $cardid = "pATvMt3rnCfwpw1LaoUfUGTybgnE";
  30.                 $cardArry = $this->getCard($cardid,$openid);
  31.                 file_put_contents(IA_ROOT . "/addons/n1ce_wxapp/api.log", $openid . PHP_EOL, FILE_APPEND);
  32.                 //var_dump($cardArry);die();
  33.                 $this->returnMsg(array('msg'=>'openid换取成功','cardArray'=>$cardArry));
  34.         }
  35.         public function getCard($card_id,$openid){
  36.                 global $_W,$_GPC;
  37.                 //获取access_token
  38.             load()->classs('weixin.account');
  39.                 load()->func('communication');
  40.                 $access_token = WeAccount::token();
  41.             $ticket = $this->getApiTicket($access_token);
  42.          
  43.                 //获得ticket后将参数拼成字符串进行sha1加密
  44.                 $now = time();
  45.                 $timestamp = $now;
  46.                 $nonceStr = $this->createNonceStr(8);
  47.                 $card_id = $card_id;
  48.                 $openid = $openid;
  49.                 $arr = array($card_id,$ticket,$nonceStr,$openid,$timestamp);//组装参数
  50.         asort($arr, SORT_STRING);
  51.                 $sortString = "";
  52.                  foreach($arr as $temp){
  53.                         $sortString = $sortString.$temp;
  54.                  }
  55.                 $signature = sha1($sortString);
  56.                 $cardArry = array(
  57.                         'code' =>"",
  58.                         'openid' => $openid,
  59.                         'timestamp' => $now,
  60.                         'signature' => $signature,
  61.                         'cardId' => $card_id,
  62.                         'ticket' => $ticket,
  63.                         'nonceStr' => $nonceStr,
  64.                  );
  65.                 return $cardArry;
  66.    }
  67.    private function getApiTicket($access_token){
  68.                 global $_W, $_GPC;
  69.                 $w = $_W['uniacid'];
  70.                 $cookiename = "wx{$w}a{$w}pi{$w}ti{$w}ck{$w}et";
  71.                 $apiticket = $_COOKIE[$cookiename];
  72.                 if (empty($apiticket)){
  73.                         $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$access_token}&type=wx_card";
  74.                         load()->func('communication');
  75.                         $res = ihttp_get($url);
  76.                         $res = json_decode($res['content'],true);
  77.                         if (!empty($res['ticket'])){
  78.                                 setcookie($cookiename,$res['ticket'],time()+$res['expires_in']);
  79.                                 $apiticket = $res['ticket'];
  80.                         }else{
  81.                                 message('获取api_ticket失败:'.$res['errmsg']);
  82.                         }
  83.                 }
  84.                 return $apiticket;
  85.         }
  86.         private function createNonceStr($length = 16) {
  87.                 $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  88.                 $str = "";
  89.                 for ($i = 0; $i < $length; $i++) {
  90.                         $str.= substr($chars, mt_rand(0, strlen($chars) - 1) , 1);
  91.                 }
  92.                 return $str;
  93.         }
复制代码
小程序接收卡券参数调用wx.addcard()

  1. if(typeof wx.addCard === 'function' ) {
  2.                                 wx.showLoading({ title: '加载中', mask: true });
  3.                                 wx.addCard({
  4.                                         cardList: [{
  5.                                                 cardId: cardArray.cardArray.cardId,
  6.                                                 cardExt: '{"code": "", "openid": cardArray.cardArray.openid, "timestamp": cardArray.cardArray.timestamp, "signature":cardArray.cardArray.signature}'
  7.                                         }], // 需要添加的卡券列表,cardExt内的签名使用公众号appid获取
  8.                                         success: function (res) {
  9.                                            var cardList = res.cardList; // 添加的卡券列表信息
  10.                                         },
  11.                                         fail: function (res) {
  12.                                                 console.error(res) // 卡券添加结果
  13.                                         }
  14.                                          
  15.                                 })
  16.                         }else{
  17.                                 wx.showLoading({ title: '失败', mask: true });
  18.                         }
复制代码
这样子就搞定了小程序卡券领取DEMO


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

3

帖子

12

积分

禁止访问

积分
12
发表于 2017-10-22 23:31:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

0

主题

5

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2017-12-26 23:12:17 | 显示全部楼层
看下完整不
回复

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2018-2-6 17:51:41 | 显示全部楼层
看看                     
回复

使用道具 举报

84

主题

145

帖子

380

积分

中级会员

Rank: 3Rank: 3

积分
380
发表于 2018-2-27 10:09:10 | 显示全部楼层
三网合一,尽享电信、联通、广电高速上网0资费,不限流量不限网速,山区、农村、城镇高速免费上网永不花钱!最新9500WG接收信号距离高达19公里,无论您身在地球任何一个角落,都能搜到信号实现免费上网,最新软件全自动智能管理,信号强,网速快,优先自动连接上网,免去您任何手动繁琐作,保证让您高速上网免费不花钱就是这么简单!
朋友们,您还在为家里装修要拉网线烦恼吗?还在忧愁每年交昂贵网费吗?还在苦恼出差无法上网吗?还在傻傻节省4G流量每月还要高达几十元流量费吗?还在敢怒不敢言的公司、学校、宿舍限制上网吗?还在苦逼每天站在阳台高举手机为了搜一个wifi吗?世界上最遥远的距离是明明有wifi,却用不了是多么痛苦的事!玩一会王者荣耀没了几个G的流量,看了一会视频,没了几个G的流量,壕!?还是无奈!?明明很节省,没用少则几十元多则上百元的流量费,如此高昂的费用是不是让您皱眉呢?没关系,用最新9500WG永久免费上网吧!只要238元让您永久免费上网不花钱,无需电脑,无需布线,只需插电,电脑、手机、平板免费上网就是这么任性,wifi信号覆盖高达19公里,无需站阳台,无需放窗外,想在哪里就在哪里!信号强,网速快,免费上网,能免则免,免费到底!
免费热线:188-2652-1502  客服QQ:1094201567 官网 www.ccyxf.com












9500WG
回复

使用道具 举报

127

主题

229

帖子

593

积分

高级会员

Rank: 4

积分
593
发表于 2018-2-27 18:39:18 | 显示全部楼层
不限流量不限网速,山区、农村、城镇高速免费上网不花钱!最新9500WG接收信号高达19公里,无论您身在地球任何一个角落,都能搜到信号实现免费上网,最新软件全自动智能管理,信号强,网速快,优先自动连接上网,免去您任何手动繁琐作,保证让您高速上网免费不花钱就是这么简单!
朋友们,您还在为家里装修要拉网线烦恼吗?还在忧愁每年交昂贵网费吗?还在苦恼出差无法上网吗?还在傻傻节省4G流量每月还要高达几十元流量费吗?还在敢怒不敢言的公司、学校、宿舍限制上网吗?还在苦逼每天站在阳台高举手机为了搜一个wifi吗?世界上最遥远的距离是明明有wifi,却用不了是多么痛苦的事!玩一会王者荣耀没了几个G的流量,看了一会视频,没了几个G的流量,壕!?还是无奈!?明明很节省,没用少则几十元多则上百元的流量费,如此高昂的费用是不是让您皱眉呢?没关系,用最新9500WG永久免费上网吧!只要238元让您永久免费上网不花钱,无需电脑,无需布线,只需插电,电脑、手机、平板免费上网就是这么任性,wifi信号覆盖高达19公里,无需站阳台,无需放窗外,想在哪里就在哪里!信号强,网速快,免费上网,能免则免,免费到底!
免费热线:188-2652-1502  客服QQ:1094201567 官网 www.ccyxf.com
回复

使用道具 举报

0

主题

1

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2018-3-7 14:23:44 | 显示全部楼层
有demo吗?
回复

使用道具 举报

184

主题

301

帖子

794

积分

高级会员

Rank: 4

积分
794
发表于 2018-3-7 16:58:51 | 显示全部楼层
KA72体积全球最小智能监控摄像机,小巧机身和1圆硬币差不多,麻雀虽小五脏俱全,KA72主控芯片采用美国进口安霸芯片,有史以来,最强大,最智能的芯片,保证连续录像录音不发热不死机,1600万像素单反级别完全媲美iPhone8摄像头,8核芯让运行更流畅更稳定,摄像镜头采用进口OV9715图像感光蓝镜芯片,170度宽广角上下左右全覆盖,KA72更是不惜成本打造全新技术HDR+WDR软硬合一,不论是在强光、弱光、晴天、雨天、阴天等不同环境都能自动校检所摄取画面清晰可见。强劲的18颗进口纳米夜视灯不爆红不发红,保证在漆黑一片无任何光线可视范围高达100米!录像录音不闪灯不亮灯、晚上夜视不发红,更隐蔽更神奇,防偷防婚外最佳设备!强磁机身随意吸贴,无需任何安装,更隐蔽更便捷的智能监控让您随心所欲!
选择KA72的理由:可吸附在衣服、包包、椅子、床下、衣柜、窗帘、洗手间、电视、门框、天花板、电灯、汽车等等,安装位置只有您想不到,没有KA72做不到。内置大容量电池,充满可用72小时,可连接充电宝、电源边充电录;KA72更是内置特有Turbo一键穿墙WIFI模块,WIFI发射更远更强更稳定,无需网络、无需网线、无需流量、无需布线,苹果手机、安卓手机、手机无需联网想看就看,智能监控就该这么简单,您想要的画面它都有!
在花样年华的世界上,你对她的信任不一定能换来她的真诚,爱人出轨、女友背叛、保姆虐童、员工偷懒、仓库失窃、店铺被抢、入室偷盗...还原真相,KA72您值得拥有!出差在外,家里发生了什么,您想要的画面,手机想看就看!远程监控不受距离限制,例如KA72在中国,人在美国,拿出手机就可以实时看、回放、下载、删除,隐私的画面,想下载就下载,想删就删,监控就该这样智能。
KA72参数:1600万像素、170度大广角、18颗进口夜视不发红光、HDR+WDR+WiFi功能、8核心处理器、全新HEVC编码技术。我们追求高质量,我们不打价格战,我们只拼高品质!
QQ:851138899    热线:13530047234    官网:www.25xc.net












KA72
回复

使用道具 举报

快速回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

7快速回复 扫码关注微信二维码 返回顶部 返回列表