'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); } }