这是小主本人第一次跟ios打配合,可以说是差点就暴走了,废话不多说看代码
//模拟post提交
public static function http_post_json($json,$t_url) {
$postData = http_build_query($json);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $t_url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // stop verifying certificate
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
$r = curl_exec($curl);
curl_close($curl);
return $r;
}
这是小主专门给ios官方接口写的POST的CURL请求,ios也有官方说明必须用application/x-www-form-urlencoded请求头的方式来请求这个接口
因为小主比较懒 client_secret 这个算法实在是不想算,于是就交给了ios客服端大哥传给我,这个也只是传一次,我这边接口会写死,因为过期时间有6个月,但是客户端改会比较麻烦,就决定6个月ios生成一次我这边更新一下
下面是小主请求post方法的代码也是为了大家方便
public function verifyReceipt(){
$t_url = 'https://appleid.apple.com/auth/token';
$json = [
'client_id' => 应用程序标识符,
'refresh_token' => 客户端返回的token,
'client_secret' => 客户端生成的密钥,
'code' => 从应用程序的用户代理收到的授权代码,
'grant_type' => 'authorization_code',(这个呢,是小主理解复杂了,其实就是要传authorization_code,才闹出这么大的笑话来,大家不必担心,小主已经给大家踩过坑了)
];
$info = $this->http_post_json($json,$t_url);
}
这些就可以完美解决返回invalid_client问题