这篇文章主要介绍了微信公众号实现会员卡领取功能的相关资料,需要的朋友可以参考下
1、会员卡的领取也需要js-sdk接口(可以参考获取微信公众号获取用户的地理位置信息)(借鉴网址:http://gaoboy.com/article/25.html)
2、 比获取用户地理位置信息多了一个是需要单独获取签名包,签名方式也和获取用户地理位置的不同(这里再说一下获取签名包的方式)
获取js-sdk签名包:
1、当前的url、时间戳、随机字符串、jsapiticket进行组合
//调用js-sdk的签名包 public function getSignPackage() { $jsapiTicket = $this->getJsApiTicket(); // 注意 URL 一定要动态获取,不能 hardcode.(获取当前网页的url) $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; //时间戳 $timestamp = time(); //随机字符串获取 $nonceStr = $this->createNonceStr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序 $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url"; //生成字符串是用来签名用的 $signature = sha1($string); $signPackage = array( "appId" => $this->appid, "nonceStr" => $nonceStr, "timestamp" => $timestamp, "url" => $url, "signature" => $signature, "rawString" => $string ); return $signPackage; }
获取会员卡签名包:
//使用会员卡领取的签名包 public function getHuiYuanSignPackage() { $apiTicket = $this->getApiTicket(); // 注意 URL 一定要动态获取,不能 hardcode.(获取当前网页的url) $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; //时间戳 $timestamp = time(); //随机字符串获取 // $nonceStr = $this->createNonceStr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序 $string = $timestamp.$apiTicket."pVYA_t3RCVF_yhNcO6QCeAmb-1UI"; //生成字符串是用来签名用的 $signature = sha1($string); $signPackage = array( "timestamp" => $timestamp, "signature" => $signature, ); return $signPackage; }
详细代码说明:
HTML页面:
//引入微信js文件 <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script type="text/JavaScript"> //配置信息验证接口(填写的js-sdk获取的签名包的参数) wx.config({ debug: false, appId: '<?PHP echo $signPackage["appId"];?>', timestamp: '<?php echo $signPackage["timestamp"];?>', nonceStr: '<?php echo $signPackage["nonceStr"];?>', signature: '<?php echo $signPackage["signature"];?>', jsApiList: [ // 所有要调用的 API 都要加到这个列表中 'addCard' ] }); wx.ready(function(){ //添加卡券 document.querySelector('#addCard').onclick = function () { wx.addCard({ cardList: [ { cardId: "",//微信公众号内创建的会员卡的id cardExt: '{"timestamp":"<?php echo $huiyuanPackage['timestamp'] ?>","signature":"<?php echo $huiyuanPackage['signature'] ?>"}'//会员卡的签名包 } ], //成功之后的回调的函数(通过回调函数该表数据库是否领取会员卡的状态) success: function (res) { $.ajax({ url: '__CONTROLLER__/editHuiYuan', type: 'post', dataType: 'json', data: {is_LingQu: '1',user_id:"<?php echo $user['user_id'] ?>"}, success:function(){ $("#addCard").html("我的会员卡"); } }) } }); }; }); </script>
控制器中的代码:
类库:http://www.jb51.net/article/115732.htm
public function index(){ $user_id = session('user_id'); if($user_id){ $jssdk = new \Home\Model\WechatModel(); $signPackage = $jssdk->GetSignPackage();//获取js-sdk签名包 $huiyuanPackage = $jssdk->getHuiYuanSignPackage();获取会员卡签名包 //获取用户信息 $user = M('user')->where(array('user_id' => $user_id))->find(); //产品收藏数量统计 $goods_count = M('goods_shoucang')->where(array('user_id' => $user_id))->count(); //门店收藏数量统计 $shop_count = M('shop_shoucang')->where(array('user_id' => $user_id))->count(); }else{ //判断该用户是否存在 $model = new \Home\Model\WechatModel(); $openid_accesstoken = $model->openId(); $rst = M('user')->where(array('user_openid' => $openid_accesstoken['openid']))->find(); if($rst){ session('openid',$openid_accesstoken['openid']); session('user_id', $rst['user_id']); $jssdk = new \Home\Model\WechatModel(); $signPackage = $jssdk->GetSignPackage(); $huiyuanPackage = $jssdk->getHuiYuanSignPackage(); //获取用户信息 $user = M('user')->where(array('user_id' => $rst['user_id']))->find(); //产品收藏数量统计 $goods_count = M('goods_shoucang')->where(array('user_id' => $rst['user_id']))->count(); //门店收藏数量统计 $shop_count = M('shop_shoucang')->where(array('user_id' => $rst['user_id']))->count(); }else{ $userInfo = $model->getOpenId($openid_accesstoken['openid'],$openid_accesstoken['access_token']); $data = array( 'user_img' => $userInfo['headimgurl'], 'user_openid' => $userInfo['openid'], 'user_name' => filter($userInfo['nickname']), 'user_register_time' => time(), 'city' => $userInfo['province'].'-'.$userInfo['city'], ); $id = M('user')->add($data); session('openid', $userInfo['openid']); session('user_id',$id); $jssdk = new \Home\Model\WechatModel(); $signPackage = $jssdk->GetSignPackage(); $huiyuanPackage = $jssdk->getHuiYuanSignPackage(); //获取用户信息 $user = M('user')->where(array('user_id' => $id))->find(); //产品收藏数量统计 $goods_count = M('goods_shoucang')->where(array('user_id' => $id))->count(); //门店收藏数量统计 $shop_count = M('shop_shoucang')->where(array('user_id' => $id))->count(); } } $this->assign('signPackage', $signPackage); $this->assign('huiyuanPackage', $huiyuanPackage); $this->assign('user', $user); $this->assign('shop_count', $shop_count); $this->assign('goods_count', $goods_count); $this->display(); }
Atas ialah kandungan terperinci 分享微信公众号实现会员卡领取的功能. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa
