342 lines
11 KiB
PHP
342 lines
11 KiB
PHP
<?php
|
|
|
|
namespace app\openapi\controller\api;
|
|
|
|
use app\gateway\service\RedisService as redisObj;
|
|
use dever\Log;
|
|
use think\exception\HttpResponseException;
|
|
|
|
use think\response\Xml;
|
|
class Taobao extends Coretb
|
|
{
|
|
|
|
# 是否检测数据
|
|
protected bool $check = false;
|
|
|
|
protected $header = [
|
|
'Content-type' =>'text/xml; charset=GBK'
|
|
];
|
|
protected $options=[
|
|
|
|
'encoding' => 'GBK',
|
|
];
|
|
public function query()
|
|
{
|
|
#注意修改id
|
|
// $this->mid = '2';
|
|
|
|
$data = input();
|
|
Log::write('openapi', 'taobao_query', $data);#写入到日志里
|
|
$this->options['root_node'] = 'gamezctopquery';
|
|
$result = array(
|
|
'tbOrderNo' => $data['tbOrderNo'],
|
|
'coopOrderSuccessTime' =>time(),
|
|
'coopOrderStatus' => 'SUCCESS',
|
|
'failedReason' => '',
|
|
'coopOrderNo' => 'XT'.$data['tbOrderNo'],
|
|
'failedCode' => '',
|
|
'coopOrderSnap' => $data['tbOrderSnap'],
|
|
);
|
|
|
|
// $resultlog=$result;
|
|
// unset($resultlog['coopOrderSnap']);
|
|
// Log::write('openapi', 'taobao_request1', $resultlog);#写入到日志里
|
|
// $result['coopOrderStatus'] = 'GENERAL_ERROR';//tbOrderSnap
|
|
// $result['failedReason'] = iconv("UTF-8", "gbk", '签名失败');
|
|
// $result['failedCode'] = '0102';
|
|
|
|
|
|
|
|
|
|
|
|
return xml($result,200,$this->header,$this->options);
|
|
}
|
|
|
|
# 查询接口 一般用于查询数据,同步执行
|
|
public function query1()
|
|
{
|
|
$data = input();
|
|
$this->options['root_node'] = 'gamezctopquery';
|
|
$result = array(
|
|
'tbOrderNo' => $data['tbOrderNo'],
|
|
'coopOrderSuccessTime' =>'',
|
|
'coopOrderStatus' => '',
|
|
'failedReason' => '',
|
|
'coopOrderNo' => '',
|
|
'failedCode' => '',
|
|
'coopOrderSnap' => '',
|
|
);
|
|
|
|
$order = '';
|
|
$merchant_order = $data['tbOrderNo'];
|
|
|
|
$redis = new redisObj();
|
|
$data = $redis->get('taobao_query' . $merchant_order);
|
|
|
|
//TODO修改
|
|
if ($data) {
|
|
$data = is_array($data) ? $data : json_decode($data, true);
|
|
} else {
|
|
$data = $this->getOrder($order, $merchant_order);
|
|
|
|
}
|
|
|
|
if (!$data) {
|
|
$result['coopOrderStatus'] = 'GENERAL_ERROR';
|
|
$result['failedReason'] = iconv("UTF-8", "gbk", '签名失败');
|
|
$result['failedCode'] = '0104';
|
|
|
|
return xml($result,200,$this->header,$this->options);
|
|
}
|
|
|
|
|
|
$result['coopOrderNo'] = $merchant_order;
|
|
|
|
|
|
if ($data['status'] == '2') {
|
|
$result['coopOrderStatus'] = 'SUCCESS';
|
|
$result['coopOrderSnap'] = json_decode($data['param'], true)['tbOrderSnap'];
|
|
$result['coopOrderSuccessTime'] = $data['channel_callback_at'];
|
|
} elseif ($data['status'] == '3') {
|
|
$result['coopOrderStatus'] = 'FAILED';//tbOrderSnap
|
|
$result['failedReason'] = iconv("UTF-8", "gbk", '充值失败');
|
|
$result['failedCode'] = '0503';
|
|
|
|
} else {
|
|
$result['coopOrderStatus'] = 'UNDERWAY';
|
|
}
|
|
|
|
|
|
return xml($result,200,$this->header,$this->options);
|
|
}
|
|
|
|
# 提交接口 一般用于提交数据,异步执行
|
|
public function charge()
|
|
{
|
|
#注意修改id
|
|
// $this->mid = '2';
|
|
|
|
$data = input();
|
|
$data['tbOrderSnap'] = iconv("gbk", "UTF-8", $data['tbOrderSnap']);
|
|
// print_r($data);die;
|
|
Log::write('openapi', 'taobao_request', $data);#写入到日志里
|
|
$this->options['root_node'] = 'gamezctoporder';
|
|
$result = array(
|
|
'tbOrderNo' => $data['tbOrderNo'],
|
|
'coopOrderSuccessTime' =>date('Y-m-d H:i:s',time()),
|
|
'coopOrderStatus' => 'SUCCESS',
|
|
'failedReason' => '',
|
|
'coopOrderNo' => 'XT'.$data['tbOrderNo'],
|
|
'failedCode' => '',
|
|
'coopOrderSnap' => iconv("UTF-8", "gbk", $data['tbOrderSnap']),
|
|
);
|
|
$resultlog=$result;
|
|
unset($resultlog['coopOrderSnap']);
|
|
Log::write('openapi', 'taobao_request1', $resultlog);#写入到日志里
|
|
// $result['coopOrderStatus'] = 'GENERAL_ERROR';//tbOrderSnap
|
|
// $result['failedReason'] = iconv("UTF-8", "gbk", '签名失败');
|
|
// $result['failedCode'] = '0102';
|
|
try {
|
|
#推送到redis队列
|
|
$this->queue('charge', $data);
|
|
} catch (\Exception $e) {
|
|
Log::write('errorTip', 'redis', $e->getMessage());
|
|
}
|
|
|
|
|
|
return xml($result,200,$this->header,$this->options);
|
|
}
|
|
public function notify()
|
|
{
|
|
#注意修改id
|
|
// $this->mid = '2';
|
|
|
|
$data = input();
|
|
$xxx = 'http://gw.api.taobao.com/router/rest?app_key=34598038&method=taobao.game.charge.zc.updatesupplierorder&v=2.0&sign=9FF65E767D2A87D854E22293E2BB6F97×tamp=2024-01-31+22%3A38%3A26&partner_id=top-apitools&format=json&sign_method=md5&coop_order_no=XT2056197109492058778&tb_order_no=2056197109492058778&coop_order_success_time=20150623+000005&coop_order_status=SUCCESS&coop_order_snap=0.01%7C12144%7C%E9%AA%8F%E7%BD%91%E4%B8%80%E5%8D%A1%E9%80%9A%7C%7C%7C%7B%22buyerIp%22%3A%22182.84.47.5%22%2C%22buyerIpv6%22%3A%22%22%2C%22outerId%22%3A%221001%22%7D&version=1.0.0&coop_id=2217166441303';
|
|
|
|
$this->options['root_node'] = 'gamezctoporder';
|
|
// $result = array(
|
|
// 'method'=>'taobao.game.charge.zc.updatesupplierorder',
|
|
// 'app_key'=>$data['app_key'],
|
|
//// 'timestamp'=> date('Y-m-d HH:i:s',time()),
|
|
// 'timestamp'=> '2024-01-31 16:29:39',
|
|
// 'v'=>'2.0',
|
|
// 'sign_method'=>'md5',
|
|
// 'format'=>'json',
|
|
//
|
|
// 'coop—Id' => $data['coopId'],
|
|
// 'tbOrderNo' =>$data['tbOrderNo'],
|
|
// 'coopOrderNo' => 'XT'.$data['tbOrderNo'],
|
|
// 'coopOrderStatus' => 'SUCCESS',
|
|
//
|
|
//// 'coopOrderSuccessTime' => date('Y-m-d H:i:s',time()),
|
|
// 'coopOrderSuccessTime' => '2024-01-31 16:29:39',
|
|
//
|
|
// 'coopOrderSnap' => $data['tbOrderSnap'],
|
|
// 'version'=>'1.0.0'
|
|
//
|
|
//
|
|
// );
|
|
// http://gw.api.taobao.com/router/rest?app_key=34598038&method=taobao.game.charge.zc.updatesupplierorder&v=2.0&sign=9FF65E767D2A87D854E22293E2BB6F97×tamp=2024-01-31 22:38:26&partner_id=top-apitools&format=json&sign_method=md5&coop_order_no=XT2056197109492058778&tb_order_no=2056197109492058778&coop_order_success_time=20150623
|
|
$result = array(
|
|
'method'=>'taobao.game.charge.zc.updatesupplierorder',
|
|
'app_key'=>'34598038',
|
|
// 'timestamp'=> date('Y-m-d HH:i:s',time()),
|
|
'timestamp'=> '2024-01-31 23:56:11',
|
|
'v'=>'2.0',
|
|
'sign_method'=>'md5',
|
|
'format'=>'json',
|
|
|
|
'coop_id' => '2217166441303',
|
|
'tb_order_no' =>'2056197109492058778',
|
|
'coop_order_no' => 'XT2056197109492058778',
|
|
'coop_order_status' => 'SUCCESS',
|
|
|
|
// 'coopOrderSuccessTime' => date('Y-m-d H:i:s',time()),
|
|
'coop_order_success_time' => '20150623 000005',
|
|
|
|
'coop_order_snap' => '0.01|12144|骏网一卡通|||{"buyerIp":"182.84.47.5","buyerIpv6":"","outerId":"1001"}',
|
|
'version'=>'1.0.0'
|
|
|
|
|
|
);
|
|
|
|
|
|
$result['sign'] = $this->tbsign($result);
|
|
// print_r($result);die;
|
|
$url='http://gw.api.taobao.com/router/rest?method=taobao.game.charge.zc.updatesupplierorder&v=2.0&sign_method=md5&format=json&app_key='.$data['app_key'].'×tamp='.$result['timestamp'].'&coop_id='.$result['coop_id'].'&tb_order_no='.$result['tb_order_no'].'&coop_order_no='.$result['coop_order_no'].'&coop_order_status='.$result['coop_order_status'].'&coop_order_success_time='.$result['coop_order_success_time'].'&coop_order_snap='.$result['coop_order_snap'].'&version='.$result['version'].'&sign='.$result['sign'];
|
|
// $url = urlencode($result);
|
|
print_r($url);die;
|
|
$sju = $this->get_curl_post($url);
|
|
print_r($sju);
|
|
// $result['coopOrderStatus'] = 'GENERAL_ERROR';//tbOrderSnap
|
|
// $result['failedReason'] = iconv("UTF-8", "gbk", '签名失败');
|
|
// $result['failedCode'] = '0102';
|
|
|
|
|
|
|
|
|
|
|
|
die;
|
|
}
|
|
public function tbsign($request): string
|
|
{
|
|
ksort($request);
|
|
$signature_string = '';
|
|
foreach ($request as $k => $v) {
|
|
$signature_string .= $k.$v;
|
|
}
|
|
|
|
//$signature_string = substr($signature_string, 0, -1);
|
|
|
|
$signature_string = '8ffd6e30dc5ee6cc2b7c9778b81e648d'.$signature_string.'8ffd6e30dc5ee6cc2b7c9778b81e648d';
|
|
return strtoupper(md5($signature_string));
|
|
}
|
|
|
|
public static function generateSign(array $params,string $appSecret) : string
|
|
{
|
|
ksort($params);
|
|
|
|
$stringToBeSigned = $appSecret;
|
|
foreach ($params as $k => $v)
|
|
{
|
|
if(!is_array($v) && "@" != substr($v, 0, 1))
|
|
{
|
|
$stringToBeSigned .= "$k$v";
|
|
}
|
|
}
|
|
unset($k, $v);
|
|
$stringToBeSigned .= $appSecret;
|
|
|
|
return strtoupper(md5($stringToBeSigned));
|
|
}
|
|
|
|
public function charge1()
|
|
{
|
|
#注意修改id
|
|
// $this->mid = '2';
|
|
|
|
$this->input();
|
|
|
|
|
|
$settingStatus = sysconf('settingStatus');
|
|
if ($settingStatus == 1) {
|
|
$this->noTB(401003);
|
|
}
|
|
|
|
$data = $this->channel($this->mid, $this->product, true);
|
|
|
|
$this->yesTB($data, 'submit', $this->order);
|
|
}
|
|
|
|
# 提交接口 一般用于提交数据,异步执行
|
|
public function dc_charge(): void
|
|
{
|
|
$this->charge();
|
|
}
|
|
#取消接口
|
|
public function cancel()
|
|
{
|
|
#注意修改id
|
|
// $this->mid = '2';
|
|
|
|
$data = input();
|
|
|
|
// $tborderfk = array(
|
|
// 'tbOrderNo' => $data['tbOrderNo'],
|
|
//// 'coopOrderSuccessTime' => $data['timestamp'],
|
|
// 'coopOrderStatus' => 'GENERAL_ERROR',
|
|
// 'failedReason' => 'CANCEL',
|
|
//// 'failedCode' => '0102',
|
|
// 'coopOrderNo' => "XT".$data['tbOrderNo']
|
|
// );
|
|
$tborderfk = array(
|
|
'tbOrderNo' => $data['tbOrderNo'],
|
|
'coopOrderSuccessTime' => $data['timestamp'],
|
|
'coopOrderStatus' => 'GENERAL_ERROR',
|
|
'failedReason' => '签名失败',
|
|
'failedCode' => '0102',
|
|
'coopOrderNo' => "XT".$data['tbOrderNo']
|
|
);
|
|
|
|
// header("Content-type: text/xml; charset=GBK");
|
|
// throw new HttpResponseException(xml($tborderfk));
|
|
$code = 200;
|
|
$header = [
|
|
'Content-type' =>'text/xml; charset=GBK'
|
|
];
|
|
return xml($tborderfk,$code,$header,array('root_node' => 'gamezctopcancel', 'encoding' => 'GBK',));
|
|
}
|
|
#code获取
|
|
public function opencode(): void
|
|
{
|
|
$codedata = $this->request->get();
|
|
|
|
$code = $codedata['code'];
|
|
|
|
$url = 'https://openapi.kwaixiaodian.com/oauth2/access_token';
|
|
|
|
$appid = 'ks700591219246529660';
|
|
$grant_type = 'code';
|
|
$app_secret = 'USMLVa0BKM7e_j39zBUvfQ';
|
|
$url = $url . '?app_id=' . $appid . '&grant_type=' . $grant_type . '&code=' . $code . '&app_secret=' . $app_secret;
|
|
|
|
$response = $this->send_get($url);
|
|
|
|
$responseData = json_decode($response, true);
|
|
|
|
$merchant = \app\merchant\service\MerchantService::instance();
|
|
#注意修改
|
|
$mid = '2';
|
|
$update = array(
|
|
'refresh_token' => $responseData['refresh_token']
|
|
);
|
|
|
|
|
|
$merchant->db()->where(array('id' => $mid))->update($update);
|
|
|
|
|
|
}
|
|
|
|
|
|
} |