微信公衆番号スキャンコード登録原理とコード実現
2363 ワード
1.ユーザが公衆番号を開いてスキャン機能をクリックする(scancode_waitmsgというタイプを使用すればよいことに注意する)
2.ユーザーはQRコードをスキャンして微信に情報を送信し、微信はXML形式で私たちのサーバーに情報を送信します.
3.データを受信し、データベースまたはキャッシュにデータを保存します.コードは以下の通りです.
4.同時にpc側のQRコードページには、タイマーがあり、ずっと1つのページまたは方法を要求し、sessionidに基づいてデータベースを検索し、対応するデータがある場合は、ユーザー情報をsessionに格納し、ログイン成功表示に戻ると同時に、sessionidとopenidを格納するテーブルにログインIDを作成したり、ログインと同時にデータを削除したりします.コードは次のとおりです.
このときpcページのログインに成功し、公衆番号にスキャン成功をユーザーに提示することができる(ユーザーに提示しないと異常を報告する)
2.ユーザーはQRコードをスキャンして微信に情報を送信し、微信はXML形式で私たちのサーバーに情報を送信します.
3.データを受信し、データベースまたはキャッシュにデータを保存します.コードは以下の通りです.
$wechatObj = new wechatCallbackapiTest();
$xml = file_get_contents('php://input','r');
$arr = $wechatObj->XmlToArr($xml);
//
if($arr['Event'] == 'scancode_waitmsg') {
//file_put_contents(__DIR__.'/aa.log',print_r($wechatObj->XmlToArr($xml),true),FILE_APPEND);
$link = mysqli_connect('127.0.0.1','root','root','shop');
$openid = $arr['FromUserName'];
$ToUserName = $arr['ToUserName'];
$CreateTime = time();
$MsgType = $arr['MsgType'];
$sessionid = $arr['ScanCodeInfo']['ScanResult'];
mysqli_query($link,"insert into shop_sessid_openid(sessid,openid) values('{$sessionid}','{$openid}')");
$weixin_arr = [
'ToUserName' => $openid,
'FromUserName' => $ToUserName,
'CreateTime' => $CreateTime,
'MsgType' => 'text',
'Content' => ' ',
];
echo $str = $wechatObj -> ArrToXml($weixin_arr);
file_put_contents(__DIR__.'/aa.log',$str,FILE_APPEND);
}
4.同時にpc側のQRコードページには、タイマーがあり、ずっと1つのページまたは方法を要求し、sessionidに基づいてデータベースを検索し、対応するデータがある場合は、ユーザー情報をsessionに格納し、ログイン成功表示に戻ると同時に、sessionidとopenidを格納するテーブルにログインIDを作成したり、ログインと同時にデータを削除したりします.コードは次のとおりです.
public function weixin_do(){
$sessid = session_id();
$sess_data = M('sessid_openid')->where(['sessid'=>$sessid])->find();
if(!empty($sess_data)){
$open_data = M('weixin')->where(['openid'=>$sess_data['openid']])->find();
if(!empty($open_data)){
$user_data = M('user')->where(['phone'=>$open_data['user_phone']])->find();
session('user_data',$user_data);
M('sessid_openid')->where(['sessid'=>$sessid])->delete();
echo 1;
}
}
}
このときpcページのログインに成功し、公衆番号にスキャン成功をユーザーに提示することができる(ユーザーに提示しないと異常を報告する)