1.由于微信在读取信息的时候
通过https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET拿到了对应的
成功后拿到{"access_token":"XXX","expires_in":7200}
失败后拿到的信息是{"errcode":40013,"errmsg":"invalid appid hint: [kKQzLa0945vr23]"}
json解析一般是json_encode($str,true)
2.获取微信端的信息(微信的链接都是https类型,这点在请求的时候,file_get_contents请求的不是很理想,特别是请求过多的时候,用这个方法是没法请求到的,在weiphp) 下面是一个封装的post的数据方法
//接口间互相json格式的交互封装
function post_data($url, $param, $is_file = false, $return_array = true) {
//将需要发送的对应的数据到数组,对数组进行格式json编码,同时兼容出post文件
if (! $is_file && is_array ( $param )) {
$param = json_encode( $param );
}
if ($is_file) {
$header [] = "content-type: multipart/form-data; charset=UTF-8";
} else {
$header [] = "content-type: application/json; charset=UTF-8";
}
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
//请求的方式是post
curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, "POST" );
// 禁用后cURL将终止从服务端进行验证
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
//不检查证书
curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );
//发送头部字段
curl_setopt ( $ch, CURLOPT_HTTPHEADER, $header );
//告诉对方 自己的浏览器型号
curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)' );
//即表示自动进行跳转抓取(如果URL发生了302重定向)继续抓取
curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 );
//自动重定向开启
curl_setopt ( $ch, CURLOPT_AUTOREFERER, 1 );
//发送的post参数
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $param );
//得到的结果不显示在屏幕上,作为变量结果储存
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
$res = curl_exec ( $ch );
//如果运行错误,返回一个错误号
$flat = curl_errno ( $ch );
if ($flat) {
$data = curl_error ( $ch );
}
curl_close ( $ch );
//拿到了返回结果后json格式转化为可以使用的数组格式
$return_array && $res = json_decode ( $res, true );
return $res;
}
3.获取自己对应公众号openid(这个仅仅可以获取到用户openid——用户的openid是用户微信号和公众号加密后的唯一结果)
https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID
通过post_data可以获取前10000个用户(一般当前的测试开发,关注数量在10000以内)
{"total":2,"count":2,"data":{"openid":["","OPENID1","OPENID2"]},"next_openid":"NEXT_OPENID"}
PS:获取到所有用户的openid后 需要一张用户数据表储存当前的用户openid。然后可以根据openid读取到对应的openid信息
正常情况下需要保存一个当前公众号还有一个openid与其进行对应。(这样每次可以用当前数据库和线上进行对比的时候,有着非常大的
便利,当会员超过1W后,进行定期更新即可)
4.根据对应的openid 拉去到对应的用户信息(这里是详细信息)
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
单个的读取用户信息得到用户公共信息包:(授权的时候,和这个很相似)
{
"subscribe": 1,
"openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M",
"nickname": "Band",
"sex": 1,
"language": "zh_CN",
"city": "广州",
"province": "广东",
"country": "中国",
"headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"subscribe_time": 1382694957,
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
"remark": "",
"groupid": 0
}
5.https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN(另外的批量拉取的接口,支持一次性拉到100条信息)
批量获取会员信息的数据格式
$data = $list['data']['openid'];
foreach($data as $val) {
$vo['user_list'][] = array(
'openid'=>$val,
'lang' => 'zh-CN'
);
}
然后调用post_data方法就可以拿到一个二维数组
array("user_info_list"=>array()) 这种格式
PS:本次主要整理了微信会员用户的批量读取与批量更新逻辑信息逻辑。(用户的批量拉取和处理是最基础的功能,也是公众号管理平台最重要的功能之一)
逻 辑思路:根据当前所在的微信公众号ID,读取微信公众号的appID和appserect,生成一个token缓存在某个文件内(当然少量的微信号的时 候,可以直接存入到数据库),先去请求微信读取其所有会员openid,(暂时开发的会员数量是1W以下的公众号)根据获取到的批量会员openid,去 读取对应的会员信息(批量获取接口),将批量获取到的会员数据接口写入平台的user表,根据返回的user表的uid写入一张公众号ID和 openid,uid的映射表(这样的好处是,这张表主要处理会员数据与微信服务器端的数据同步问题,否则会员表数据量太大,进行同步校验的时候数据表压 力比较大) 另外加个status字段(这样可以记录跟本地会员的整合情况,同步的记录已经同步,其他的会员记录是从其他渠道导入过来的)