- curl获取
- header跳转
两种交互方式均执行
或
代码示例:
一、curl获取
业务系统:
public function test_curl(){
$time=time();
$case_id=$_POST['case_id']; //在API中注册的某个用户
$post_data=['time'=>$time,'secret_key'=>get_secret($time,$case_id),'caseid'=>$case_id];
$url = "http://api.com/get/test";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
}
public function get_secret($data,$case_id){
//根据case_id读取出注册时的随机码
return sha1($casename.$data.$secret_code);
}
API系统:
public function test(){
$input=input();
$time = $input['time'];
$secret_key = get_secret($time, $input['caseid']);
if (!check_auth($input)) {
return ['code'=>1,'msg'=>'获取失败','data'=>[]];
}
$arr=[];
//操作
return $arr;
}
public function check_auth($input){
if(!$input['caseid'])
return FALSE;
$config=getConfigId($input['caseid']);
if($config['pass'])
return TRUE;
$time=$input['time'];
$secret_key=get_secret($time,$input['caseid']);
if($input['secret_key']!=$secret_key){
return FALSE;
}
return TRUE;
}
$output即为获取到的内容
二、header跳转
示例:获取微信的openid
业务系统:
public funciton get_openid(){
$input=input();
$openid=session('openid');
if(!$openid){
$msg = $input['msg'];
if (!$msg) {
$now_url = 'http://yewu.com/index/index';
$time = time();
$token_url = 'http://api.com/weixin/index?redirect_uri=' . urlencode($now_url) . '&caseid=' . $case_id . '&secret_key=' . get_secret($time,$case_id) . '&time=' . $time;
header("Location: $token_url");
exit ;
} else {
$code = $input['code'];
if ($code == 1) {
return FALSE;
} else {
$openid=$input['openid'];
}
}
session('openid',$openid);
}
return $openid;
}
API系统:
public function index(){
//1.验证
//2.获取openid
cache($input['secret_key'],$input);
$this->get_openid($input['secret_key']);
}
public function get_openid($state){
$input = input();
$state = $state ? : $input['state'];
$info = cache($state);
$case_config=getConfigId($info['caseid']);
$config = array(
'token' => $case_config['wx_token'],
'encodingaeskey' => $case_config['wx_EncodingAESKey'],
'appid' => $case_config['wx_Appid'],
'appsecret' => $case_config['wx_AppSecret'],
'site_url'=>$case_config['site_url'],
'wx_type'=>$case_config['wx_type']
);
$W = new Wechat($config,$case_config['site_url']);
$code = $input['code'];
if (!$code) {
$wx_back = $case_config['site_url'] . '/weixin/get_openid';
$get_openid_url = $W -> WeChat -> getOauthRedirect($wx_back, $state, 'snsapi_base');
header("Location: $get_openid_url");
exit ;
} else {
$data = $W -> WeChat -> getOauthAccessToken();
if ($info) {
$member_info=$this->get_member_info($info['caseid'],$data['unionid'],$data['openid']);
$nickName=$member_info['nickName']?:'未知';
$status=$nickName?1:0;
$avatarUrl=$member_info['avatarUrl']?:'';
$token_url = $info['redirect_uri'] . '?openid=' . $data['openid'] . '&nickName=' . $nickName.'&avatarUrl='.$avatarUrl.'&status='.$status.'&member_id='.$member_info['id'].'&code=0&msg=操作成功';
cache($state,null);
header("Location: $token_url");
exit ;
}
}
}
———未完待续———