微信公众号实现会员卡领取功能
更新时间:2017年6月11日 22:11 点击:2173
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(); }
以上所述是小编给大家介绍的微信公众号实现会员卡领取功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
下一篇: PHP简单获取随机数的常用方法小结
相关文章
- 如何提高微信搜索排名?微信公众号如何取名?8大微信公众号取名套路有讲究!一个好的公众号名称往往能够直接体现出账号的价值、服务、内容、范围、行业等信息,让需要的用户...2017-07-06
- 微信公众号如何吸粉?如果你正好在运营公众号,而又正好在为涨粉发愁,没有想到更好的解决办法之前不妨用这5招,立竿见影 如果你正好在运营公众号,而又正好在为涨粉发愁,...2017-07-06
- 打开网页微信,用微信扫描一下登陆网页版的微信,打开之后有一个文件传输助手,把查看历史记录的网址发过去。 发过去的时候,这个网址会自动转换,从“文件传输助手&rd...2016-05-19
- 如果问你现在互联网领域,什么最赚钱?很多人都会第一时间想到微信。微信的出现颠覆了人们以往对营销的认识,微信营销、微店、微商的出现,让微信不再只是简单的通讯软件,更是...2017-07-06
- 这篇文章主要介绍了微信公众号实现会员卡领取功能的相关资料,需要的朋友可以参考下...2017-06-11
- 这篇文章主要介绍了.NET C#使用微信公众号登录网站,教大家利用微信公众号进行网站登录,感兴趣的小伙伴们可以参考一下...2021-09-22
- 这篇文章主要介绍了微信公众平台开发教程(三) 基础框架搭建,具有一定的参考价值,有需要的可以了解一下。...2020-06-25
- 微信公众号号在手机中通过api接口可以实现自定义分享内容了,下面我们来看这个接口的实现步骤。 一、准备阶段公众号一个,微网站一个。 二、绑定域名先登录微信公众...2016-11-25
ASP.NET Core2静默获取微信公众号的用户OpenId实例代码
这篇文章主要给大家介绍了关于ASP.NET Core2静默获取微信公众号的用户OpenId的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22- 微信公众号点击菜单即可打开并登录微站实现步骤比较复杂了,但很多微站在己用上了,所以本文章就为各位整理一下吧,希望可以帮助到大家哦。 现在大部分微站都通过用户...2016-11-25
- 微信公众号有一个测试系统,在调试的时候,可以用那个测试系统来调试,比较方便,最好不要在实际系统中调试 以前的时候,我是通过网页来获取到用户信息的,现在发现在公...2016-05-19
- 这篇文章主要大家详细解析了微信公众号判断用户是否已关注php代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-07-02
- 微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的demo文件进行修改的,下面给各位分享一个。 初次接触的时候写的一些,有点乱…...2016-11-25
- 这篇文章主要为大家详细介绍了java微信公众号支付示例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-12-31
- 这篇文章主要给大家介绍了关于利用C#如何生成带二维码的专属微信公众号推广海报的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们一起来看看吧...2020-06-25
C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享
经过几天研究网上的代码和谢灿大神的帮忙,今天终于用C#实现了微信公众号群发消息,现在分享一下...2020-06-25- 微信公众号开发者模式普通消息模式我们用到的比较多就是说什么然后自动回复了,下面我们就一起来看一篇关于微信公众号开发者模式普通消息模式例子了,具体的操作如下所示...2016-11-25
- 这篇文章主要介绍了C#微信开发之微信公众号标签管理功能 的相关资料,需要的朋友可以参考下...2020-06-25
- 本篇文章主要介绍了微信公众平台开发教程(二) 基本原理及消息接口,具有一定的参考价值,有兴趣的朋友可以了解一下。...2021-09-22
- 这篇文章主要介绍了C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取,需要的朋友可以参考下...2020-06-25