
- 在 Channel 控制器中添加 queryBalance 方法,用于查询渠道余额 - 在 Core 控制器中添加 curl 方法,用于发起 HTTP 请求 - 新增 Feedov 服务类,实现飞之度商户自动提单功能- 更新 Meicheng 服务类,添加账户余额查询接口 - 在前端页面添加查询余额按钮和相关事件处理逻辑
369 lines
15 KiB
PHP
369 lines
15 KiB
PHP
<?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);
|
||
}
|
||
} |