小程序端代码
let that = this;
uni.login({
success: (r) => {
console.log('succ', r);
requestUtil.get(url, {code: r.code, anonymousCode:r.anonymousCode}, (res) => {
console.log('return', res);
that.setData({
sessionKey: res.datas.session_key,
openid: res.datas.openid,
unionid: res.datas.unionid || ''
});
callback && callback(res.datas.session_key);
});
}
})
服务器端代码
$code = I('post.code');
$url= 'https://developer.toutiao.com/api/apps/v2/jscode2session';
// 启动一个CURL会话
$ch = curl_init();
// 要访问的地址
curl_setopt($ch, CURLOPT_URL, $url);
// 对认证证书来源的检测 https请求 不验证证书和hosts
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
// 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
//解决数据包大不能提交
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
// 发送一个常规的Post请求
curl_setopt($ch, CURLOPT_POST, true);
if (!empty($data)){
// Post提交的数据包
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
// 设置超时限制防止死循环
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
// 设置超时限制防止死循环
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
// 获取的信息以文件流的形式返回
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if (!empty($headers)){
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
}
$output = curl_exec($ch);
if ($output === false) {
return 'Curl error: ' . curl_error($ch);
}
curl_close($ch);
return $output;
返回内容
{"err_no":40014,"err_tips":"bad params","data":{"session_key":"","openid":"","anonymous_openid":"","unionid":"","dopenid":""}}
通过提交工单,抖音技术那边回复说是postman下请求返回值正常。因此猜测,是curl写法不严谨导致的。
$curl = curl_init ();
$options = array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_VERBOSE => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode ($data),
CURLOPT_HTTPHEADER => array (
"Accept: application/json",
'Content-Type: application/json'
)
);
if (! curl_setopt_array ( $curl , $options )) {
throw new \RuntimeException ( 'curl_setopt_array failed. ' . curl_errno ( $ch ) . ': ' . curl_error ( $curl ) );
}
$response = curl_exec ( $curl );
$err = curl_error ( $curl );
curl_close ( $curl );
if ($err) {
return "cURL Error #:" . $err;
} else {
return $response;
}