zoukankan      html  css  js  c++  java
  • 微信小程序领取卡券

    微信小程序领取卡券

    标签(空格分隔): php


    开发前需要准备的工作

    1 小程序和公众号要有绑定
    2 小程序和该公众号要绑定到同一个开发平台下 [https://open.weixin.qq.com/]
    3 公众号开通微信卡券功能
    4 卡券是在公众号上生成的
    5 小程序领取公众号上的卡券
    

    看官方文档

    公众号平台卡券文档[https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432]
    
    小程序卡券文档[https://developers.weixin.qq.com/miniprogram/dev/api/card.html]
    
    简单说一下创建卡券:
        我使用的是[创建会议门票]
        接口:http请求方式: POSTURL:https://api.weixin.qq.com/card/create?access_token=ACCESS_TOKEN
        
        参数:
        1 access_token		调用接口凭证
        2 POST数据		    JSON数据
        
        POST数据格式:
        1 card_type		string(24)	    会议门票类型。
        2 base_info		JSON结构		基本的卡券数据,见下表,所有卡券通用。
        3 meeting_detail    string(3072)	本次会议于2015年5月10号在广州举行,会场地点:xxxx。	会议详情。
        主要就是填充base_info信息自己看文档就明白了 
        
        返回值:
        {
           "errcode":0,
           "errmsg":"ok",
           "card_id":"p1Pj9jr90_SQRaVqYI239Ka1erkI"
        }
        **记得把card_id保存**
    
    小程序领取卡券:
    
        前端发起请求:wx.addCard(OBJECT)
        后端把需要的参数给前端
        
        参数:
            cardList: [
                {
                  cardId: '',
                  cardExt: '{"code": "", "openid": "", "timestamp": "", "signature":""}'
                }, {
                  cardId: '',
                  cardExt: '{"code": "", "openid": "", "timestamp": "", "signature":""}'
                }
            ]
        cardId : 生成卡券返回的cardId
        cardExt : json字符串
        code : 每一张卡券都有一个code[创建时自己生成的code,这个code有特殊符号限制,和长度限制,自己去感受下微信的坑]
        openid : 用户的openid
        timestamp : 时间戳/秒
        signature : 签名
        
        回调:
            处理你领取成功的业务逻辑
    

    示例代码

    小程序领取卡券:

        # 领取卡券
        public function receiveCard()
        {
            # 小程序appid
            $appId = input('appid'); 
            # openid
            $openId = input('openid); 
            # 订单id
            $orderId = input('order_id');
            
            $list = $this->getInfo($appId, $openId, $orderId);
            
            # 返回前端json数据格式
            return $list;
        }
        
        
        public function getInfo($appId, $openId, $orderId)
        {
            # 业务处理[比如:是否开启卡券功能 | 是否绑定了公众号 等等等.....]
            if () xxxxxxxxx;
            
            # 查询订单获取保存的 cardId 和 每张卡券的唯一标识 code
            $orderInfo = Db::table('')->field('code, card_id')->where()->select();
            
            # 获取ApiTicket 主要用于生成签名
            1 [签名文档] : [https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115] 
            
            2 [获取access_token] : [https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$config['appid']."&secret=".$config['secret'];]
            
            3 [获取api_ticket] : [https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=wx_card]
            
            注意:appid 和 secret 是公众号的,通过小程序的appid查询对应公众号的配置。apiTicket 和 accessToken 应该缓存或者是个公共的方法,避免多个地方使用失效。
            
            # 处理数据返回数据
            foreach ($orderInfo as $key => $value) {
            
                # 生成签名的参数
                # nonce_str 自己生成的随机字符串31位 
                $params = [
                    'code'       => $value['code'],
                    'api_ticket' => $apiTicket,
                    'timestamp'  => time(),
                    'nonce_str'  => sp_random_string(31),
                    'card_id'    => $value['card_id'],
                    'openid'     => $openId
                ];
                $signature = $this->getSignature($params);
                $value['openid'] = $params['openid'];
                $value['timestamp'] = $params['timestamp'];
                $value['signature'] = $signature;
                $data[] = $value;
            }
        }
        
        # 生成签名
        public function getSignature($params)
        {
             sort($params, SORT_STRING);
             return sha1(implode($params));
        }
        
        # 回调 
        public function cardCallBack()
        {
            # $_POST 和 input('post.')  竟然接收不到数据 没办法只能用 $GLOBALS['HTTP_RAW_POST_DATA']
            $postData = $GLOBALS['HTTP_RAW_POST_DATA'];
            $postData = json_decode($postData, true);
            $cardList = $postData['card_list'];
            
            # 把数据转数组
            foreach ($cardList as $k => $v) {
                $v['cardExt'] = json_decode($v['cardExt'], true);
                $data[] = $v;
            }
            foreach ($data as $key => $value) {
                # 业务处理 
            }
        }
  • 相关阅读:
    1、安装electron
    Bootstrap fileinput v3.0(ssm版)
    Bootstrap fileinput v2.0(ssm版)
    网络概念
    win10远程桌面连接提示身份验证错误,要求的函数不受支持的解决方案
    Quartz 定时任务时间设置
    牛顿迭代法快速寻找平方根
    mysql 中出现:不能打开到主机的连接,在端口3306: 连接失败
    spring boot+mybatis+generator生成domain大小写问题
    Decoder is not a @Sharable handler, so can't be added or removed multiple times
  • 原文地址:https://www.cnblogs.com/yanweifeng/p/9449572.html
Copyright © 2011-2022 走看看