REAPI/app/channel/service/system/Jinjiaqi.php
mzeros b8b289c58c refactor(app): 金佳奇通道支持卡密直充
- 增加了 unLockCardStatus 变量来判断是否需要解锁卡密
- 在获取随机卡密后,根据通道配置选择是否进行解锁
- 优化了卡密解锁失败后的处理逻辑- 新增了卡密解锁成功后的响应数据结构
2024-12-07 12:27:26 +08:00

469 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\channel\service\system;
use app\channel\service\KamiService;
use app\kami\service\LockCardService;
use app\merchant\service\MerchantService;
use app\merchant\service\OrderService;
/**
* 骏网接口
* Class Junka
* @package app\channel\service
*/
class Jinjiaqi extends Core
{
# 这几个可以后台设置
protected $host = 'http://open.greatnesss.com/';
protected $mid = 'dongfakeji';
protected $token = 'dfkj6688';
protected $api = '';
protected $aeskey = '383147446d6e4e6c';
protected $goodid = '';
# 沃尔玛卡卡密
public function walmart_cardbuy($param)
{
$check = array
(
// 'proid' => 'productCode',
'num' => 'BuyNum',
'ChargeAccount'=>'ChargeAccount'
);
$param['ChargeAccount'] = 'kami';#新魔力卡种
$this->api = 'api/Order/CreateGameOrder';
return $this->submit($param, $check);
// var_dump($param);die;
}
public function cardbuy($param)
{
$check = array
(
// 'proid' => 'productCode',
'num' => 'BuyNum',
'ChargeAccount'=>'ChargeAccount'
);
$param['ChargeAccount'] = 'kami';#新魔力卡种
$this->api = 'api/Order/CreateGameOrder';
return $this->submit($param, $check);
// var_dump($param);die;
}
public function jkxh_cardbuy($param)
{
$check = array
(
// 'proid' => 'productCode',
'num' => 'BuyNum',
'ChargeAccount'=>'ChargeAccount'
);
$param['ChargeAccount'] = 'kami';#新魔力卡种
$this->api = 'api/Order/CreateGameOrder';
return $this->submit($param, $check);
// var_dump($param);die;
}
# 智选卡
public function jkzx_cardbuy($param)
{
$check = array
(
// 'proid' => 'productCode',
'num' => 'BuyNum',
'ChargeAccount'=>'ChargeAccount'
);
$param['ChargeAccount'] = 'kami';#新魔力卡种
$this->api = 'api/Order/CreateGameOrder';
return $this->submit($param, $check);
// var_dump($param);die;
}
# 智选卡
public function jkyx_cardbuy($param)
{
$check = array
(
// 'proid' => 'productCode',
'num' => 'BuyNum',
'ChargeAccount'=>'ChargeAccount'
);
$param['ChargeAccount'] = 'kami';#新魔力卡种
$this->api = 'api/Order/CreateGameOrder';
return $this->submit($param, $check);
// var_dump($param);die;
}
# Q币充值
public function qbcz($param)
{
$check = array
(
'num' => 'BuyNum',
'account' => 'ChargeAccount',
);
$this->api = 'api/Order/CreateGameOrder';
return $this->submit($param, $check);
}
#抖币
public function dy($param)
{
$check = array
(
'num' => 'BuyNum',
'account' => 'ChargeAccount',
);
$this->api = 'api/Order/CreateGameOrder';
return $this->submit($param, $check);
}
#快手币
public function ks($param)
{
$check = array
(
'num' => 'BuyNum',
'account' => 'ChargeAccount',
);
$this->api = 'api/Order/CreateGameOrder';
return $this->submit($param, $check);
}
# 通知处理 主要返回状态 2是成功 3是失败
public function notify($data)
{
$request = $data;
$result = array();
$result['cash'] = 1;
// $result['status'] = 4;
if ($data['Status'] == 1) {
$result['status'] = 2;
} else if($data['Status'] == 2) {
$result['status'] = 3;
}else {
$result['status'] = 4;
}
if (isset($data['StatusMsg']) && $data['StatusMsg']) {
# 流水号
$data['s_nubmer'] = $result['s_nubmer'] = $data['StatusMsg'];
}
if(isset($data['Cards']) && $data['Cards']){
$order = [
'order_id' => $data['UserOrderId']
];
// print_r($order);die;
$query = $this->query($order);
$data['kami'] = $query['kami'];
$result['status'] = 7;
if (isset($data['kami']) && $data['kami']['cardno']) {
# 流水号
$data['s_nubmer'] = $result['s_nubmer'] = $data['kami']['cardno'];
if($data['s_nubmer'] == 'NoCardNum'){
$data['s_nubmer'] = $result['s_nubmer'] = $data['kami']['cardpwd'];
}
}
}
$result['yes'] = 'OK';
$result['data'] = $data;
return $result;
}
# 数据响应格式处理
public function response($data)
{
$log['type'] = 'response';
$log['data'] = $data;
$log['config'] = $this->data;
$this->log($log);
// {"Code":1,"Content":{"SaleMoney":10.2200,"GoodsId":2811,"OrderTime":"2024-04-16 10:14:37.000","GoodsName":"腾讯全国Q币1元","OrderId":"13006856310501376"},"Message":"响应成功"}
$array = $this->json_decode($data);
if (!$array) {
$msg = 'error';
} elseif (isset($array['Code']) && $array['Code'] == '1') {
# 正确
$msg = 'ok';
} else {
# 错误
$msg = isset($array['Message']) ? $array['Message'] : 'error';
}
return array
(
'msg' => $msg,
'data' => $data,
'array' => $array,
);
}
# 查询接口
public function query($order)
{
// $orderRequest = json_decode($order['request'], true);
$request['UserId'] = $this->mid;
$request['UserOrderId'] = $order['order_id'];
$request['TimeStamp'] =date('YmdHis');
#timestamp{$时间戳A}userid20817userorderid{$订单编号}key09261cb9068b9cd7c4ece6f468d955eb
$request['Sign'] = $this->_sign($request, array('TimeStamp', 'UserId', 'UserOrderId'));
$url = $this->host . 'api/Order/QueryChargeCardsResult';
$response = $this->send_post($url,$request,'POST' );
$log['type'] = 'query_response';
$log['data'] = $response;
$log['config'] = $this->data;
$this->log($log);
$array = $this->json_decode($response);
#{"Code":1,"Content":{"Cards":[],"SaleMoney":"10.2200","StatusMsg":"成功","Status":"1","UserOrderId":"3851936066457190837","OrderId":"13006988870623232"},"Message":"响应成功"}
$result['Status'] = 4;
if (isset($array['Code']) ) {
if($array['Content']['Status'] == '1'){
if(isset($array['Content']['Cards'][0]['CardNo']) ){
$kamidata = [
'cardno' => $array['Content']['Cards'][0]['CardNo'],
'cardpwd' => $array['Content']['Cards'][0]['CardPwd'],
'expired' => $array['Content']['Cards'][0]['ExpiraDate'],
];
$result['Status'] = 7;
$result['status'] = 7;
$result['kami'] = $kamidata;
}else{
$result['Status'] = 1;
$result['status'] = 2;
}
}elseif ($array['Content']['Status'] == '2'){
$result['Status'] = 3;
$result['status'] = 3;
}
if (isset($array['Content']['StatusMsg']) && $array['Content']['StatusMsg']) {
# 流水号
// $data['szRtnMsg']
$result['szRtnMsg'] = $array['Content']['StatusMsg'];
}
}
// var_dump($result);die;
return $result;
}
# 提交数据
private function submit($param, $check)
{
$param = $this->param($param, $check);
if (is_string($param) || (is_array($param) && $param['status'] == 1)) {
return $param;
}
$request = $param['detail'];
$request['UserId'] = $this->mid;
$request['UserOrderId'] = $param['order'];
// $request['bill_time'] = date('YmdHis');
// $request['bill_id'] = $param['order'];i
if($request['ChargeAccount'] != "kami"){
$request['BuyNum'] = $request['BuyNum'] *$param['cash'];
}
$request['GoodsId'] = $this->getGid($param['cash']);
// $request['time_stamp'] = date('YmdHis');
$request['Sign'] = $this->_sign($request, array('BuyNum', 'ChargeAccount', 'GoodsId', 'UserId', 'UserOrderId'));
$url = $this->host . $this->api;
$randomKami = null;
if($this->channel['suoka_status'] == 2 && isset($this->channel['other_data'])){
$suoka_data = json_decode($this->channel['other_data'],true);
if(isset($suoka_data['un_suoka_url'] )){
if(isset($suoka_data['card_kind_'.$this->channel['id'].'00'.$this->product['id']])){
$KamiService = KamiService::instance();
$randomKami = $KamiService->getData($param['cash'],1, 1, true, false, $this->channel['id'].'00'.$this->product['id']);
}
}
$unLockCardStatus = true;
if(!$randomKami &&isset($suoka_data['kami_direct_buyback'])){
$KamiService = KamiService::instance();
$randomKami = $KamiService->getData($param['cash'],1, 1, true, false, $this->channel['id'].'00'.$this->product['id']);
$unLockCardStatus = false;
}
}
if ($randomKami) {
if($unLockCardStatus){
$LockCardService = LockCardService::instance();
$unlockcard = $LockCardService->call('UnlockCard', $this->channel['id'],$randomKami['cnum'],$randomKami['cpwd'],$this->product['id'],$randomKami['value']);
if($unlockcard != 'ok'){
$response = $this->send_post($url,$request,'POST' );
$response = $this->response($response);
$KamiService->db()->where(array('cnum' => $randomKami['cnum']))->update(array('status' => '7'));
}else{
$randomKami_data = [
'is_kami' =>1,
];
$msg = 'yescard';
$randomKami_data['kami'] = array
(
'cardno'=>$randomKami['cnum'],
'cardpwd'=>$randomKami['cpwd'],
'expired'=>$randomKami['expire_time'],
'value'=>$randomKami['value'],
);
$response = [
'msg' => $msg,
'data' => $randomKami_data,
'array' => $randomKami_data
];
}
}else{
$randomKami_data = [
'is_kami' =>1,
];
$msg = 'yescard';
$randomKami_data['kami'] = array
(
'cardno'=>$randomKami['cnum'],
'cardpwd'=>$randomKami['cpwd'],
'expired'=>$randomKami['expire_time'],
'value'=>$randomKami['value'],
);
$response = [
'msg' => $msg,
'data' => $randomKami_data,
'array' => $randomKami_data
];
}
} else {
$response = $this->send_post($url,$request,'POST' );
$response = $this->response($response);
}
//$response['data'] = '';
//$response['msg'] = 'ok';
$channel_order_id = '';
if (isset($response['array']['Content']['OrderId'])) {
$channel_order_id = $response['array']['Content']['OrderId'];
}
$param['account'] = $request['ChargeAccount'];
$this->create($param['order'], $channel_order_id, $param['merchant_order'], $param['cash'], $url, $request, $response, 1, $param['account']);
return $response['msg'];
}
public function send_post($notify_url, $post_data,$type)
{
$postdata = http_build_query($post_data);
$options = array(
'http' => array(
'method' => $type,
'header' => 'Content-type:application/x-www-form-urlencoded',
'content' => $postdata,
'timeout' => 15 * 60 // 超时时间(单位:s
)
);
$context = stream_context_create($options);
$result = file_get_contents($notify_url, false, $context);
return $result;
}
public function decrypt_3des($encrypted_string){
$cipher = "des-ede3"; // 3des-ebc 使用的是des-ede3算法
$mode = "ebc"; // 工作模式为ebc
$iv = ""; // EBC模式不需要IV留空即可
return openssl_decrypt(hex2bin($encrypted_string), $cipher, $this->aeskey, $options=OPENSSL_RAW_DATA, $iv); // 输出解密后的字符串
}
private function _sign($request, $param)
{
//ksort($request);
$signature_string = '';
foreach ($param as $k => $v) {
// if (isset($request[$v]) && $request[$v]) {
// var_dump($v);die;
$signature_string .= strtolower($v) . $request[$v] ;
}
// $signature_string = strtolower($signature_string);
$signature_string .= 'key'.$this->token;
// var_dump($signature_string);die;
$signature_string = iconv("UTF-8", "GBK", $signature_string);
// var_dump($signature_string);die;
// $signature_string = iconv("UTF-8", "gbk", $signature_string);
return md5($signature_string);
}
public function upOrderResponse($kami,$merchant_order_id,$orderResponse)
{
$orderService = OrderService::instance();
$response = json_decode($orderResponse,true);
$response['kami'] = $kami;
$data = ['response' => json_encode($response)];
$orderService->db()->where(array('merchant_order_id' => $merchant_order_id))->update($data);
}
}