test_service d3170b4d1c 1
2023-12-01 15:43:29 +08:00

128 lines
3.7 KiB
PHP
Executable File

<?php
namespace hema\delivery\engine;
use think\facade\Cache;
use hema\Http;
/**
* 闪送
*/
class Shansong extends Basics
{
/**
* 预发布订单 - 计算订单价格
*/
public function preOrder($data)
{
$params = $this->params($data);
$url = $this->config['api_url'] . '/openapi/developer/v5/orderCalculate';
$result = json_decode(Http::post($url, $params),true);
if($result['status'] == 200) {
if($result['data']['estimateReceiveSecond'] == -1){
$delivery_time = '无预计时长';
}else{
$delivery_time = '预计' . (int)$result['data']['estimateReceiveSecond']/60 . '分钟';
}
return [
'delivery_time' => $delivery_time, //预计送达时间
'delivery_distance' => $result['data']['totalDistance'] . '米', //配送距离
'delivery_price' => '¥' . $result['data']['totalFeeAfterSave'] / 100 . '元', //配送费用
'time' => '', //预计送达时间
'distance' => $result['data']['totalDistance'], //配送距离
'price' => $result['data']['totalFeeAfterSave'] / 100, //配送费用
'shansong' => $result['data']
];
}
$this->error = $result['msg'];
return false;
}
/**
* 发布订单
*/
public function addOrder($data)
{
$params = $this->params($data);
$url = $this->config['api_url'] . '/openapi/developer/v5/orderPlace';
$result = json_decode(Http::post($url, $params),true);
if($result['status'] == 200) {
return $result['data'];
}
$this->error = $result['msg'];
return false;
}
/**
* 取消订单
*/
public function cancelOrder($order_no)
{
$params = $this->params([
'issOrderNo' => $order_no
]);
$url = $this->config['api_url'] . '/openapi/developer/v5/abortOrder';
$result = json_decode(Http::post($url, $params),true);
if($result['status'] == 200) {
return $result['data'];
}
$this->error = $result['msg'];
return false;
}
/**
* 公共参数
*/
private function params($data = null, $token = true){
$params = [
'clientId' => $this->config['app_key'],
'timestamp' => time()
];
if($token){
$params['accessToken'] = $this->getToken();
}
if(!is_null($data)){
$params['data'] = hema_json($data);
}
$params['sign'] = $this->sign($params);
return $params;
}
// 生成签名
private function sign($params)
{
$string = $this->config['app_key'];
if(isset($params['accessToken'])){
$string .= 'accessToken' . $params['accessToken'];
}
$string .= 'clientId' . $params['clientId'];
if(isset($params['data'])){
$string .= 'data' . $params['data'];
}
$string .= 'timestamp' . $params['timestamp'];
$string = md5($string);//MD5(32位)加密
$sign = strtoupper($string);//字母转换为大写
return $sign;
}
//获取AccessToken
private function getToken()
{
if($token = Cache::get('shansong_token')){
return $token;
}
return $this->refreshToken();
}
//刷新AccessToken
private function refreshToken()
{
$params = $this->params([
'refreshToken' => $this->config['refresh_token']
],false);
$url = $this->config['api_url'] . '/openapi/oauth/refresh_token';
$result = json_decode(Http::post($url, $params),true);
if($result['status'] != 200) {
return $this->renderError('刷新AccessToken失败');
}
Cache::set('shansong_token', $result['data']['access_token'], $result['data']['expires_in']);
return $result['data']['access_token'];
}
}