公共方法
/* 有赞公共方法 */
function parse_response($response_data) {
$data = json_decode($response_data, true);
if (null === $data) {
throw new Exception('response invalid, data: ' . $response_data);
}
return $data;
}
function sent_post($url, $params) {
$headers = array();
$body = http_build_query($params);
return request_curl($url, 'POST', $body, $headers);
}
function group_url($method, $api_version) {
$method_array = explode(".", $method);
$method = '/' . $api_version . '/' . $method_array[count($method_array) - 1];
array_pop($method_array);
$method = implode(".", $method_array) . $method;
$url = config('request_url_oauthentry') . $method;
return $url;
}
function build_request_params($method, $api_params) {
if (!is_array($api_params)) {
$api_params = array();
}
$pairs = get_common_params(getYouzanToken(), $method);
foreach ($api_params as $k => $v) {
if (isset($pairs[$k])) {
throw new Exception('参数名冲突');
}
$pairs[$k] = $v;
}
return $pairs;
}
function get_common_params($access_token, $method) {
$params = array();
$params['access_token'] = $access_token;
$params['method'] = $method;
return $params;
}
function getYouzanToken() {
$access_token = cache('access_token_youzan');
if ($access_token) {
return $access_token;
} else {
$params = array();
$params['client_id'] = config('client_id');
$params['client_secret'] = config('client_secret');
$params['grant_type'] = 'silent';
$params['kdt_id'] = config('kdt_id');
$access_token_arr = parse_response(sent_post(config('request_url_token'), $params));
cache('access_token_youzan', $access_token_arr["access_token"], $access_token_arr["expires_in"]);
return $access_token_arr["access_token"];
}
}
function request_curl($url, $method, $postfields = NULL, $headers = array()) {
$ci = curl_init();
/* Curl settings */
curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($ci, CURLOPT_USERAGENT, 'X-YZ-Client 2.0.0 - PHP');
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ci, CURLOPT_TIMEOUT, 30);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ci, CURLOPT_ENCODING, "");
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ci, CURLOPT_HEADER, FALSE);
switch ($method) {
case 'POST':
curl_setopt($ci, CURLOPT_POST, TRUE);
if (!empty($postfields)) {
curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
}
break;
}
curl_setopt($ci, CURLOPT_URL, $url);
curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE);
$response = curl_exec($ci);
curl_close($ci);
return $response;
}
index.php
//根据订单号,通过接口获取订单详细信息,筛选返回有用的信息
private function get_trade($tid) {
$method = 'youzan.trade.get'; //要调用的api名称
$api_version = '4.0.0'; //要调用的api版本号
$my_params = ['tid' => $tid];
$my_files = [];
$trade_arr = parse_response(sent_post(group_url($method, $api_version), build_request_params($method, $my_params), $my_files));
dump($trade_arr);
}
App.php配置相关参数
//有赞参数
'client_id' => '',
'client_secret' => '',
'kdt_id' => '',
'request_url_token' => 'https://open.youzan.com/oauth/token',
'request_url_oauthentry' => 'https://open.youzan.com/api/oauthentry/',