REAPI/app/channel/service/system/Jinjiaqi.php
be368f3748 feat(channel): 新增卡密处理逻辑
- 在 Jinjiaqi.php 中添加 common 方法支持通用卡密提交
- 新增 KamiPool.php 和 System.php 两个新渠道服务类
- 修改 KamiOrderChanelNotify.php 等文件以支持新渠道的回调处理
- 更新 Order.php 文件以适配新的卡密提交逻辑
2025-06-16 00:03:59 +08:00

484 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 = '';
protected $AutoCash = true;
# 沃尔玛卡卡密
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 common($param)
{
$check = array
(
'num' => 'BuyNum',
'account' => 'ChargeAccount',
);
$this->AutoCash = false;
$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" && $this->AutoCash){
$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);
}
}