實現微信帶引數的二維碼功能
阿新 • • 發佈:2018-12-17
.近期專案中需要使用到將在門店註冊的會員做個區分,以便每個商戶統計在微商城內的業績
在這裡就需要使用到帶引數的二維碼。將門店引數載入二維碼裡面,使用者在掃描二維碼後,將使用者唯一的openid關聯到使用者掃碼的門店
1 ,實現步驟
① 當然是拿到使用者的accesstoken這個很重要,去微信的公開介面去 獲取資訊,都需要攜帶這個引數
access_token是公眾號的全域性唯一票據,公眾號呼叫各介面時都需使用access_token。正常情況下access_token有效期為7200秒,
一般框架裡面都封裝好了獲取accessToken的方法,這裡不再贅述了
$account= account_fetch( $_W['uniacid']); load()->classs('weixin.account'); $account_api = WeAccount::create(); $token = $account_api->getAccessToken();
② 獲取帶引數的二維碼
$post_data['action_name']='QR_LIMIT_STR_SCENE'; //指明需要帶引數的二維碼 $post_data['action_info']['scene']['scene_str'] = 'store-'.$id; //把店鋪id放入其中 $qrcode_url='https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token='.$token; $return_result = ihttp_post($qrcode_url, json_encode($post_data)); $return_json=json_decode($return_result['content'],true);
返回正常的二維碼
msg:"獲取成功!"
url:"http://weixin.qq.com/q/02INjTIKFBb6e10000007o"
③ 通過qrcode.js將二維碼顯示出來
qrcode.js大家可以在網上自己下載
<script src="./resource/js/lib/qrcode.js"></script>
function showCode(obj) { try { var shopname =$('#shopname').html(); var uniacid = $(obj).attr("data-uniacid"); var name = $(obj).attr("data-name"); var code = $(obj).attr("data-code"); //var url = "http://drp.winu.cn/app/index.php?i=" + uniacid + "&c=entry&do=member&m=ewei_shop" + "&name=" + name + "&code=" + code; var url=$(obj).attr('data-url'); if(url==''){ $(".js_qrcode_btn1").show(); } $('#barModal .modal-body').html(""); new QRCode($('#barModal .modal-body')[0], url); $("#barModal .modal-body img").css({ width: '300px', height: '300px', margin: '0 auto', }); $("#barModal .modal-body").append($("<div class='text-center shopname' style='text-align:center;font-size:18px;margin-top:15px;'>"+shopname+"</div>")); $("#barModal").modal('show'); } catch (e) { util.message(e + ""); } }
④ 處理使用者微信掃碼事件在和微信的介面api裡面處理start(掃描)事件和booking(訂閱(關注事件))
在這裡我將使用者openid與門店storeid放在快取裡面
if(!empty($message['scene'])) { $scene_tmp = explode('-', $message['scene']); if ($scene_tmp[0] == 'store') { if ($message['event'] == 'subscribe') { //關注寫入關係資料 //判斷是否是重複關注 $store_id =$scene_tmp[1]; load()->func('logging'); logging_run($scene_tmp[1],'normal',"api_save_uid",date("Y-m-d")); $result = Db::name('core_cache')->where('key', $message['from'])->value('value'); if (empty($result)) { $tmp_data['key'] = $message['from']; $tmp_data['value'] = $store_id; Db::name('core_cache')->insert($tmp_data); unset($tmp_data); }else{ //如果已經存在了這個人的資料 if($store_id <> $result){ $update['value'] = $store_id; Db::name('core_cache')->where('openid',$message['from'])->update($update); } } } } }
if (!isset($setting['passport']) || empty($setting['passport']['focusreg'])) { $storeid = Db::name('core_cache')->where('key',$message['from'])->value('value'); $storecode = ''; if(!empty($storeid)){ $storecode = Db::name('ewei_shop_store')->where('uniacid',$_W['uniacid'])->where('id',$storeid)->value('storecode'); } $data = array( 'uniacid' => $_W['uniacid'], 'email' => md5($message['from']).'@we7.cc', 'salt' => random(8), 'groupid' => $default_groupid, 'createtime' => TIMESTAMP, 'storecode'=>$storecode );
至此這個工作就做完了,將使用者與門店引數相關聯