微信开发文档笔记整理(二)

            
 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字段(这样可以记录跟本地会员的整合情况,同步的记录已经同步,其他的会员记录是从其他渠道导入过来的)


你可能感兴趣的:(微信开发文档笔记整理(二))