第一步应该先接受获取code 然后得到sessionkey和openid
第二步 把openid返回给小程序客户端,同时把sessionkey和openid存入数据库
第三步 小程序获取手机号时把openid和 encryptedData 和iv 一起发送给后端 然后调用官方的demo wxBizDataCrypt.php解密就好了,解密成功后根据openid 把手机号更新存入数据库中
这里只是单纯获取手机号而已 如果还需要用户昵称等等 多调用一步授权就可以了
<?php
ini_set('date.timezone','Asia/Shanghai');
require_once('./config/PdoMysql.class.php');
require_once('./wxxg/wxBizDataCrypt.php');
class wxs{
public $appid = "wx1111111111111111";//替换成自己的appid
public $secret = "xxxxxxxxxxxxxxxxxxxxxxxx";//替换成自己的Secert
//获取落地页参数
public function run(){
$gettimes = date("Y-m-d h:i:s",time());
//根据code获取session_key 和 openid
if(!empty($_GET))
{
if($this->test_input($_GET['m'])=="getcode"){
$code=$this->test_input($_GET['code']);
if($code){
$this->getcode($code);
}else{
$res_code['status'] = 0;
exit(json_encode($res_code));
}
}elseif($this->test_input($_GET['m'])=="getphone"){
// exit(json_encode($_POST));
//require_once('./wxxg/config.php');
$encryptedData = trim($_POST['encryptedData']);
$iv = trim($_POST['iv']);
$openid = trim($_POST['openid']);
$config = require_once('./config/config.php');
$db = \PdoMysql::getInstance($config['loacldb']);
//getRow获取数据
$sql = "SELECT * FROM xcx_huiyuan WHERE openid=:openid";
$db->bindMultiValue(array(
':openid'=>$openid
));
$res = $db->getRow($sql);
if(!empty($res))
{
$pc = new WXBizDataCrypt($this->appid, $res['sk']);
$errCode = $pc->decryptData($encryptedData, $iv, $data );
if ($errCode == 0) {
//增加按id分配
$sql = "SELECT * FROM xcx_admin WHERE id !=2";
$res = $db->getAll($sql);
//print_r($res);
$admin_num = count($res);
$imageArr = range(1, $admin_num);
$count = intval(file_get_contents('count.txt'));
if ($count > 0) $new_count = $count + 1;