微信小程序『带参数小程序码』
前言
在做『星邀请』小程序后台,遇到一个场景,需要分享朋友圈,但是微信小程序官方都是没有这个接口的。突发奇想,像朋友圈一群人发火车票好友支援,确实就是需要像这样。
思路
在微信小程序官方给出三种接口。
- 接口A: 适用于需要的码数量较少的业务场景(通过该接口生成的小程序码,永久有效,数量限制)
- 接口B:适用于需要的码数量极多的业务场景(通过该接口生成的小程序码,永久有效,数量暂无限制)
- 接口C:适用于需要的码数量较少的业务场景(通过该接口生成的小程序二维码,永久有效,数量限制)
显然,接口B适合业务场景,毕竟需要考虑用户的数量,采用接口B。
实现方法
首先,在请求接口的时候需要全局票据(access_token),获取这个就像微信公众号开发那样咯,有个两个小时的有效期,所以这里想进行存储一下,以免每次请求都去请求
access_token
/** * @param $url * @param null $data * @return bool|mixed * 请求小程序api */ function CURL($url,$data = null){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); if($output === FALSE ){ return false; } curl_close($curl); return $output; } /** * @return bool|mixed * 请求Token值 * todo 建议采用Redis方式存储Token值(过期时间7200s) */ public function GetAccessToken($wxtokenurl,$wxappid,$wxsecret) { //如果access_token没有过期,直接return if (session('access_token') && session('expire_time') > time()) { return session('access_token'); } else { //重新获取access_token $token_url = sprintf($wxtokenurl,$wxappid,$wxsecret); $TokenInfo = json_decode($this->CURL($token_url),true); session(['access_token' => $TokenInfo['access_token']]); session(['expire_time' => (time() + 7000)]); return session('access_token'); } }
请求接口生成图片
/** * @return mixed * @param $scene string 场景值 * @param $page string 具体页面 * @param $token string access_token */ public function GetpicUrl($scene,$page,$token) { $url = sprintf($this->wxpicurl,$token); $data = array( "scene" => $scene, "page" => $page, "width" => 430, "auto_color" => true ); $data = json_encode($data); $imgstream = $this->CURL($url,$data); $realpath = '/public/qrcode/' Storage::put($realpath, $imgstream); return Storage::url('qrcode/' . $filename); //返回保存路径url }