mzeros 20a9af6fd0 feat(channel): 添加查询余额功能并优化相关服务
- 在 Channel 控制器中添加 queryBalance 方法,用于查询渠道余额
- 在 Core 控制器中添加 curl 方法,用于发起 HTTP 请求
- 新增 Feedov 服务类,实现飞之度商户自动提单功能- 更新 Meicheng 服务类,添加账户余额查询接口
- 在前端页面添加查询余额按钮和相关事件处理逻辑
2024-12-20 16:14:52 +08:00

369 lines
15 KiB
PHP
Raw Permalink 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\merchant\service\system;
use app\channel\service\ChannelService;
use app\core\Service;
use app\merchant\service\OrderHistoryService;
use app\merchant\service\OrderService;
use dever\Log;
/**
* 飞之度商户自动提单
* Class Feedov
* @package app\channel\service
*/
class Feedov extends Service
{
# 这几个可以后台设置
protected $host = 'https://public-robot.open.fulu.com/';
protected $mid = '12058096';
protected $token = '0822d950783fd6e142c56a6fd39779ad';
protected $merchant_id = 85;
protected $product = 'zshcz';
protected $iv = '1111111111111111';
public function setMid($mid)
{
$this->merchant_id = $mid;
return $this;
}
# 查询订单
public function query()
{
$input = input();
$this->log($input, 'query');
$result = array();
$sign = $this->_sign($input, array('customerId', 'data', 'timestamp'));
if ($sign && isset($input['data']) && isset($input['sign']) && $sign == $input['sign']) {
$data = base64_decode($input['data']);
$order_id = '';
if (isset($data['orderId'])) {
$merchant_order_id = $data['orderId'];
$orderService = OrderService::instance();
$order = $orderService->get($order_id, $merchant_order_id, $this->merchant_id);
if (!$order) {
$orderHistoryService = OrderHistoryService::instance();
$order = $orderHistoryService->get($order_id, $merchant_order_id, $this->merchant_id);
}
if ($order) {
$result['retCode'] = '100';
$result['retMessage'] = '查询成功';
if ($order['status'] == 2) {
$data['orderStatus'] = 0;
} elseif ($order['status'] == 3) {
$data['orderStatus'] = 2;
} else {
$data['orderStatus'] = 1;
}
if ($order['channel_callback_msg']) {
$order['channel_callback_msg'] = json_decode($order['channel_callback_msg'], true);
if (isset($order['channel_callback_msg']['message']) && $order['channel_callback_msg']['message']) {
$order['msg'] = $order['channel_callback_msg']['message'];
} elseif (isset($order['channel_callback_msg']['msg']) && $order['channel_callback_msg']['msg']) {
$order['msg'] = $order['channel_callback_msg']['msg'];
}
if (isset($order['msg'])) {
$order['msg'] = json_encode($order['msg']);
}
if (isset($order['msg']) && $order['msg'] && strstr($order['msg'], '{')) {
$msg = json_decode($order['msg'], true);
$cardinfos = array();
foreach ($msg as $k => $v) {
$cardinfos[$k]['cardno'] = $v['card'];
$cardinfos[$k]['cardpass'] = $v['pwd'];
$cardinfos[$k]['expiretime'] = $v['time'];
}
$data['cardinfos'] = $cardinfos;
}
}
$data = base64_encode(json_encode($data));
$result['data'] = $data;
} else {
$result['retCode'] = '107';
$result['retMessage'] = '没有对应商品';
}
} else {
$result['retCode'] = '104';
$result['retMessage'] = '传入的参数有误';
}
} else {
$result['retCode'] = '104';
$result['retMessage'] = '传入的参数有误';
}
return json_encode($result);
}
# 获取订单
public function apply()
{
$input = input();
/*
$input = '{"data":"eyJvcmRlcklkIjoiMjM4ODEwMjk0ODg2IiwiYnV5TnVtIjoiMSIsInRvdGFsUHJpY2UiOiI2My4wMCIsImJyYW5kSWQiOiI2NTc2ODYiLCJza3VJZCI6IjEwMDQ0MTcxMDI3NDQ4IiwidXNlcklwIjoiMTE0LjI1NS4yNDkuMTU3Iiwic291cmNlVHlwZSI6MCwiZ2FtZUFjY291bnQiOiI4MzgzMTA3NjAifQ==","customerId":"12058096","sign":"df706acda0119f4a30cfa61f3cbf8b96","timestamp":"20220212112733"}';
$input = json_decode($input, true);
*/
$this->log($input, 'apply');
$result = array();
$sign = $this->_sign($input, array('customerId', 'data', 'timestamp'));
if ($sign && isset($input['data']) && isset($input['sign']) && $sign == $input['sign']) {
$this->log($input, 'request');
$data = json_decode(base64_decode($input['data']), 2);
if (isset($data['buyNum'])) {
/*
for ($num = 1; $num <= $data['buyNum']; $num++) {
$data['price'] = $data['totalPrice']/$data['buyNum'];
$data['num'] = 1;
$this->push($data);
}*/
$data['price'] = $data['totalPrice'];
$data['num'] = $data['buyNum'];
$result = $this->push($data);
} else {
$result['retCode'] = '107';
$result['retMessage'] = '没有对应商品';
}
} else {
$result['retCode'] = '104';
$result['retMessage'] = '传入的参数有误';
}
return json_encode($result);
}
private function push($item)
{
$param['cash'] = $item['price'];
$param['account'] = isset($item['gameAccount']) ? $item['gameAccount'] : $item['orderId'];
$param['num'] = $item['num'];
//brandId,skuId
$proid = '10042';
if ($item['skuId'] == '10044171027448') {
# 话费
$proid = '10042';
} elseif ($item['skuId'] == '10044576509192') {
$proid = '10312';
} elseif ($item['skuId'] == '10044576679692') {
$proid = '10313';
} elseif ($item['skuId'] == '10044576952662') {
$proid = '10314';
} elseif ($item['skuId'] == '10044577242594') {
$proid = '10315';
} elseif ($item['skuId'] == '10044577441391') {
$proid = '10316';
} elseif ($item['skuId'] == '10044577572750') {
$proid = '10317';
} elseif ($item['skuId'] == '10044577730376') {
$proid = '10318';
} elseif ($item['skuId'] == '10044577847545') {
$proid = '10319';
} elseif ($item['skuId'] == '10044577985279') {
$proid = '10320';
} elseif ($item['skuId'] == '10044728052857') {
$proid = '10320';
} elseif ($item['skuId'] == '10044526123989') {
$proid = '10266';
} elseif ($item['skuId'] == '10044525730737') {
$proid = '10265';
} elseif ($item['skuId'] == '10046204437430') {
$proid = '10264';
} elseif ($item['skuId'] == '10044525510836') {
$proid = '10263';
} elseif ($item['skuId'] == '10044172064397') {
$proid = '10262';
} elseif ($item['skuId'] == '10044731140480') {
$proid = '10321';
} elseif ($item['skuId'] == '10044731328341') {
$proid = '10322';
} elseif ($item['skuId'] == '10044731481679') {
$proid = '10323';
} elseif ($item['skuId'] == '10044731766812') {
$proid = '10324';
} elseif ($item['skuId'] == '10044731878362') {
$proid = '10325';
} elseif ($item['skuId'] == '10044740592759') {
$proid = '10326';
} elseif ($item['skuId'] == '10044849385551') {
$proid = '10004';
} elseif ($item['skuId'] == '10044861704969') {
$proid = '10003';
} elseif ($item['skuId'] == '10044861323678') {
$proid = '10005';
}
$pinfo = \app\channel\service\ProductBaseService::instance()->getOne($proid);
$product = $pinfo['key'];
$param['cash'] = $pinfo['value'];
$param['order'] = $item['orderId'];
# 验证是否可以充值
$yes = $this->yes($param['order']);
if ($yes) {
# 可以充值 去充值
$msg = ChannelService::instance()->use($this->merchant_id, $product, $param, true);
if (is_string($msg)) {
# 下单失败,回调失败
$result['retCode'] = '107';
$result['retMessage'] = $msg;
} else {
$result['retCode'] = '100';
$result['retMessage'] = '成功';
}
return $result;
}
}
# 验证是否可以充值
public function yes($order)
{
return true;
}
# 通知处理
public function notify()
{
$log['type'] = 'merchant_notify';
$log['request'] = input();
if (!isset($log['request']['merchant_order_id'])) {
echo 'error';die;
}
$merchant_order_id = $log['request']['merchant_order_id'];
if (strstr($merchant_order_id, 't')) {
echo 'success';die;
}
if (isset($log['request']['status']) && ($log['request']['status'] == 2 || $log['request']['status'] == 3)) {
if ($log['request']['status'] == 2) {
$status = "0";
} elseif ($log['request']['status'] == 3) {
$status = "2";
} else {
$status = "1";
}
$order_id = '';
$merchant_order_id = $log['request']['merchant_order_id'];
$orderService = OrderService::instance();
$order = $orderService->get($order_id, $merchant_order_id, $this->merchant_id);
if (!$order) {
$orderHistoryService = OrderHistoryService::instance();
$order = $orderHistoryService->get($order_id, $merchant_order_id, $this->merchant_id);
}
if (!$order) {
echo 'error';die;
}
if ($order['channel_callback_msg']) {
$order['channel_callback_msg'] = json_decode($order['channel_callback_msg'], true);
if (isset($order['channel_callback_msg']['message']) && $order['channel_callback_msg']['message']) {
$log['request']['msg'] = $order['channel_callback_msg']['message'];
} elseif (isset($vo['channel_callback_msg']['msg']) && $order['channel_callback_msg']['msg']) {
$log['request']['msg'] = $order['channel_callback_msg']['msg'];
}
if (isset($log['request']['msg'])) {
$log['request']['msg'] = json_encode($log['request']['msg']);
}
}
if ($order['product_key'] && strstr($order['product_key'], '_card')) {
$url = 'http://card.jd.com/api/cardApi.action';
if (!isset($log['request']['msg']) && $log['request']['status'] == 2) {
$log['request']['msg'][] = array
(
'card' => 'test123',
'pwd' => 'test123',
'time' => date('Y-m-d', time() + 360*86400),
);
$log['request']['msg'] = json_encode($log['request']['msg']);
}
} else {
$url = 'http://card.jd.com/api/gameApi.action';
}
$request['customerId'] = $this->mid;
$data['orderId'] = $merchant_order_id;
$data['orderStatus'] = $status;
if (isset($log['request']['msg']) && $log['request']['msg'] && strstr($log['request']['msg'], '{')) {
# 卡密回调
$msg = json_decode($log['request']['msg'], true);
$cardinfos = array();
if (isset($msg['card'])) {
if (strstr($msg['card'], '')) {
$card = explode('', $msg['card']);
$pwd = explode('', $msg['pwd']);
$time = explode('', $msg['time']);
} else {
$card = explode(',', $msg['card']);
$pwd = explode(',', $msg['pwd']);
$time = explode(',', $msg['time']);
}
if (isset($card) && $card) {
foreach ($card as $k => $v) {
$cardinfos[$k]['cardno'] = $v;
if (isset($pwd[$k])) {
$cardinfos[$k]['cardpass'] = $pwd[$k];
} elseif (isset($pwd[0])) {
$cardinfos[$k]['cardpass'] = $pwd[0];
} else {
$cardinfos[$k]['cardpass'] = '';
}
if (isset($time[$k])) {
$cardinfos[$k]['expiretime'] = $time[$k];
} elseif (isset($time[0])) {
$cardinfos[$k]['expiretime'] = $time[0];
} else {
$cardinfos[$k]['expiretime'] = '';
}
}
}
} else {
foreach ($msg as $k => $v) {
$cardinfos[$k]['cardno'] = $v['card'];
$cardinfos[$k]['cardpass'] = $v['pwd'];
$cardinfos[$k]['expiretime'] = $v['time'];
}
}
$data['cardinfos'] = $cardinfos;
}
$request['data'] = base64_encode(json_encode($data));
$request['timestamp'] = date('YmdHis');
$request['sign'] = $this->_sign($request, array('customerId', 'data', 'timestamp'));
$response = $this->curl('get', $url, $request);
if ($response) {
$response = json_decode($response, true);
if (isset($response['retCode']) && $response['retCode'] == 100) {
echo 'success';die;
}
}
}
echo 'error';die;
}
# 记录日志
protected function log($data, $type = 'request')
{
Log::write('jingdong', $type, $data);
}
private function _sign($request, $param)
{
$signature_string = '';
foreach ($param as $k => $v) {
if (isset($request[$v]) && $request[$v]) {
$signature_string .= $v .'=' . $request[$v] . '&';
}
}
$signature_string .= $this->token;
return md5($signature_string);
}
}