Commit 32fd971a authored by wanjilong's avatar wanjilong

add: 调整pingxx创建逻辑

parent 1559231e
...@@ -12,7 +12,7 @@ class RefundException extends BaseException ...@@ -12,7 +12,7 @@ class RefundException extends BaseException
protected $cus = [ protected $cus = [
0 => '系统异常请联系管理员', 0 => '系统异常请联系管理员',
1 => '订单信息不存在,请核对', 1 => '获取订单信息不存在,请核对',
2 => '退款已经成功操作,请核对', 2 => '退款已经成功操作,请核对',
3 => '退款进行中,请稍等', 3 => '退款进行中,请稍等',
4 => '目前仅支持支付后的订单退款,请核对', 4 => '目前仅支持支付后的订单退款,请核对',
......
...@@ -28,7 +28,6 @@ class Sdk { ...@@ -28,7 +28,6 @@ class Sdk {
*/ */
$data = (new Request())->post($url, $params,2000, 'json'); $data = (new Request())->post($url, $params,2000, 'json');
FileLog::info('sdk_call:' . 'services return', json_encode(['url'=>$url, $headers, 'req'=>$params, 'res'=>$data], JSON_UNESCAPED_UNICODE));
/* /*
[ [
"http_code"=> 200, "http_code"=> 200,
......
...@@ -25,9 +25,16 @@ class CallbackController extends Base ...@@ -25,9 +25,16 @@ class CallbackController extends Base
/**/ /**/
if(!empty($data['data']['object'])) { if(!empty($data['data']['object'])) {
if($data['type'] == 'charge.succeeded') {
$merchant_order_no = $data['data']['object']['order_no'];
} else {
$merchant_order_no = $data['data']['object']['merchant_order_no'];
}
CallbackLog::insert([ CallbackLog::insert([
'type'=>$data['type'] ?? '', 'type'=>$data['type'] ?? '',
'merchant_order_no'=>$data['data']['object']['merchant_order_no'] ?? '', 'merchant_order_no'=>$merchant_order_no ?? '',
'object_id'=>$data['data']['object']['id'] ?? '', 'object_id'=>$data['data']['object']['id'] ?? '',
'data'=>base64_encode(gzcompress($raw_data)), //压缩存储 'data'=>base64_encode(gzcompress($raw_data)), //压缩存储
]); ]);
...@@ -49,10 +56,17 @@ class CallbackController extends Base ...@@ -49,10 +56,17 @@ class CallbackController extends Base
$raw_data = file_get_contents('php://input'); $raw_data = file_get_contents('php://input');
$data = json_decode($raw_data, true); $data = json_decode($raw_data, true);
if(!empty($data['data']['object'])) { if(!empty($data['data']['object'])) {
if($data['type'] == 'refund.succeeded') {
$merchant_order_no = $data['data']['object']['order_no'];
} else {
$merchant_order_no = $data['data']['object']['merchant_order_no'];
}
CallbackLog::insert([ CallbackLog::insert([
'type'=>$data['type'] ?? '', 'type'=>$data['type'] ?? '',
'merchant_order_no'=>$data['data']['object']['merchant_order_no'] ?? '', 'merchant_order_no'=>$merchant_order_no ?? '',
'object_id'=>$data['data']['object']['id'] ?? '', 'object_id'=>$data['data']['object']['id'] ?? '',
'data'=>base64_encode(gzcompress($raw_data)), //压缩存储 'data'=>base64_encode(gzcompress($raw_data)), //压缩存储
]); ]);
......
...@@ -16,65 +16,42 @@ class OrderController extends Base ...@@ -16,65 +16,42 @@ class OrderController extends Base
*/ */
public function payAction() public function payAction()
{ {
try{ $params = $this->params;
$params = $this->params; $user_id = $params['user_id'];
$user_id = $params['user_id']; $order_id = $params['order_id'];
$order_id = $params['order_id']; $pay_method_id = $params['pay_method_id'] ?? 106;
$pay_method_id = $params['pay_method_id'] ?? 106;
$paySrv = new PayService();
$paySrv = new PayService(); $ret = $paySrv->do_pay($order_id, $user_id, $pay_method_id);
$ret = $paySrv->do_pay($order_id, $user_id, $pay_method_id);
//兼容C端客户端支付,调整返回结构,ping++ 返回 order,原生:微信、支付宝返回charge
//兼容C端客户端支付,调整返回结构,ping++ 返回 order,原生:微信、支付宝返回charge $result = [];
$result = []; $result[] = ['k'=>'order', 'v'=>$ret];
$result[] = ['k'=>'order', 'v'=>$ret]; $this->success(['result'=>$result]);
$this->success(['result'=>$result]);
}catch (PayException $e) {
$this->failed($e->getMessage(), $e->getCode());
} catch (\Exception $e) {
FileLog::error('pay-service:ping++支付报错', json_encode($params, JSON_UNESCAPED_UNICODE), $e);
$this->failed($e->getMessage(), $e->getCode());
}
} }
public function refundAction() { public function refundAction() {
try{ $params = $this->params;
$params = $this->params; $user_id = $params['user_id'];
$user_id = $params['user_id']; $order_item_id = $params['order_item_id'];
$order_item_id = $params['order_item_id'];
$refundSrv = new RefundService(); $refundSrv = new RefundService();
$ret = $refundSrv->do_refund($order_item_id, $user_id); $ret = $refundSrv->do_refund($order_item_id, $user_id);
$this->success(['result'=>$ret]); $this->success(['result'=>$ret]);
}catch (RefundException $e) {
$this->failed($e->getMessage(), $e->getCode());
} catch (\Exception $e) {
FileLog::error('pay-service:ping++退款报错', json_encode($params, JSON_UNESCAPED_UNICODE), $e);
$this->failed($e->getMessage(), $e->getCode());
}
} }
public function write_offAction() { public function write_offAction() {
try{ $params = $this->params;
$params = $this->params; $life_account_id = $params['life_account_id'];
$life_account_id = $params['life_account_id']; $order_item_id = $params['order_item_id'];
$order_item_id = $params['order_item_id'];
$refundSrv = new PayService();
$ret = $refundSrv->write_off($order_item_id, $life_account_id);
$this->success(['result'=>$ret]); $refundSrv = new PayService();
$ret = $refundSrv->write_off($order_item_id, $life_account_id);
}catch (RefundException $e) { $this->success(['result'=>$ret]);
$this->failed($e->getMessage(), $e->getCode());
} catch (\Exception $e) {
FileLog::error('pay-service:核销报错', json_encode($params, JSON_UNESCAPED_UNICODE), $e);
$this->failed($e->getMessage(), $e->getCode());
}
} }
} }
...@@ -17,6 +17,7 @@ use App\Services\pingxx\PingxxService; ...@@ -17,6 +17,7 @@ use App\Services\pingxx\PingxxService;
use App\Services\wallet\WalletService; use App\Services\wallet\WalletService;
use Helpers\Strategy; use Helpers\Strategy;
use Helpers\Sdk; use Helpers\Sdk;
use Yaf\Application;
use App\Exception\custom\PayException; use App\Exception\custom\PayException;
...@@ -45,6 +46,8 @@ class PayService ...@@ -45,6 +46,8 @@ class PayService
} }
$metadata = [ $metadata = [
'app_id'=>'merchant-c',
'environ'=>Application::app()->environ(),
'order_id'=>$order_id, 'order_id'=>$order_id,
'goods_sku_id'=>[], 'goods_sku_id'=>[],
'order_item_id'=>[], 'order_item_id'=>[],
...@@ -77,17 +80,22 @@ class PayService ...@@ -77,17 +80,22 @@ class PayService
//获取或创建支付订单 //获取或创建支付订单
$pay_order = PayOrder::get_valid_order($order_id, $new_pay_order); $pay_order = PayOrder::get_valid_order($order_id, $new_pay_order);
if (empty($pay_order)) { if (empty($pay_order)) {
throw new PayException(['cus' => 0]); throw new PayException(['cus' => 10]);
} }
if ($pay_order['pay_order_status'] == Dictionary::O_PAY_STATUS_PAYED) { if ($pay_order['pay_order_status'] == Dictionary::O_PAY_STATUS_PAYED) {
throw new PayException(['cus' => 3]); throw new PayException(['cus' => 3]);
} }
// 支持幂等,存在有效订单需要可以重复支付 // 已经创建,需要查询返回
$ret = PingxxService::getInstance()->createOrder($pay_order, $metadata); if(!empty($pay_order['third_order_id'])) {
$ret = PingxxService::getInstance()->getOrder($pay_order['third_order_id']);
} else {
$ret = PingxxService::getInstance()->createOrder($pay_order, $metadata);
}
if (!empty($ret['error'])) { if (!empty($ret['error'])) {
throw new \Exception($ret['error']['message'], '2001'); throw new \Exception($ret['error']['message'], '2301');
} }
if ($ret["status"] == 'paid' || $ret['status'] == 'refunded') { if ($ret["status"] == 'paid' || $ret['status'] == 'refunded') {
...@@ -121,19 +129,27 @@ class PayService ...@@ -121,19 +129,27 @@ class PayService
$ret['exist'] = true; $ret['exist'] = true;
} }
// 创建支付单 //判断是否做过pay操作 charge
$payment = [ if(empty($ret['charge'])) {
'charge_order_no'=> $pay_order['pay_order_id'], // 创建支付单
'charge_amount'=> $pay_order['pay_amount'], $payment = [
'channel'=> $this->getChannel($pay_method_id), 'charge_order_no'=> $pay_order['pay_order_id'],
]; 'charge_amount'=> $pay_order['pay_amount'],
'channel'=> $this->getChannel($pay_method_id),
];
$pay = PingxxService::getInstance()->pay($ret['id'], $payment); $pay = PingxxService::getInstance()->pay($ret['id'], $payment);
if (!empty($pay['error'])) { if (!empty($pay['error'])) {
throw new \Exception($pay['error']['message'], '2001'); throw new \Exception($pay['error']['message'], '2002');
}
return $pay;
} else {
return $ret;
} }
return $pay;
} }
/** /**
...@@ -151,6 +167,10 @@ class PayService ...@@ -151,6 +167,10 @@ class PayService
} }
$object = $data['data']['object']; $object = $data['data']['object'];
if(empty($object['metadata']['app_id']) || $object['metadata']['app_id'] != "merchant-c") {
//非支付中心发出的订单,需要忽略
return ['id'=>$object['id']];
}
if($data['type'] == 'charge.succeeded') { if($data['type'] == 'charge.succeeded') {
$pay_order_id = $object['order_no']; $pay_order_id = $object['order_no'];
...@@ -641,18 +661,18 @@ class PayService ...@@ -641,18 +661,18 @@ class PayService
private function getChannel($pay_method_id) { private function getChannel($pay_method_id) {
$maps = [ $maps = [
106=>"wx", //微信 App 支付 105=>"wx", //微信 App 支付
106=>"alipay", //支付宝
107=>"wx_pub", //微信 JSAPI 支付 107=>"wx_pub", //微信 JSAPI 支付
108=>"wx_pub_qr", //微信 Native 支付 108=>"wx_pub_qr", //微信 Native 支付
109=>"wx_wap", //微信 H5 支付 109=>"wx_wap", //微信 H5 支付
110=>"wx_lite", //微信小程序支付 110=>"wx_lite", //微信小程序支付
120=>"alipay", //支付宝
]; ];
if($maps[$pay_method_id]) { if(!empty($maps[$pay_method_id])) {
return $maps[$pay_method_id]; return $maps[$pay_method_id];
} else { } else {
return $maps[106]; return $maps[105];
} }
} }
} }
\ No newline at end of file
...@@ -158,11 +158,6 @@ class PingxxService ...@@ -158,11 +158,6 @@ class PingxxService
} }
public function pay($orderId, $pay) { public function pay($orderId, $pay) {
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'alipay_qr',
];
try { try {
FileLog::info('ping++:' . '订单pay发起', json_encode($pay, JSON_UNESCAPED_UNICODE)); FileLog::info('ping++:' . '订单pay发起', json_encode($pay, JSON_UNESCAPED_UNICODE));
......
...@@ -17,6 +17,7 @@ use Helpers\Strategy; ...@@ -17,6 +17,7 @@ use Helpers\Strategy;
use Helpers\Logger; use Helpers\Logger;
use App\Exception\custom\RefundException; use App\Exception\custom\RefundException;
use Yaf\Application;
class RefundService class RefundService
{ {
...@@ -57,6 +58,8 @@ class RefundService ...@@ -57,6 +58,8 @@ class RefundService
'charge'=>$data['pay_order']['third_order_id'], 'charge'=>$data['pay_order']['third_order_id'],
'charge_amount'=>$data['refund_order']['refund_amount'], 'charge_amount'=>$data['refund_order']['refund_amount'],
'metadata' => [ 'metadata' => [
'app_id'=>'merchant-c',
'environ'=>Application::app()->environ(),
'refund_order_id'=>$data['refund_order']['refund_order_id'], 'refund_order_id'=>$data['refund_order']['refund_order_id'],
'order_item_id'=>$data['refund_order']['order_item_id'], 'order_item_id'=>$data['refund_order']['order_item_id'],
'goods_sku_id'=>$order_item['goods_sku_id'] ?? '', 'goods_sku_id'=>$order_item['goods_sku_id'] ?? '',
...@@ -69,7 +72,7 @@ class RefundService ...@@ -69,7 +72,7 @@ class RefundService
$edit = ['request_pingxx_success_time'=>date('Y-m-d H:i:s')]; $edit = ['request_pingxx_success_time'=>date('Y-m-d H:i:s')];
RefundOrder::update($edit, ['refund_order_id'=>$data['refund_order']['refund_order_id']]); RefundOrder::update($edit, ['refund_order_id'=>$data['refund_order']['refund_order_id']]);
} else { } else {
throw new \Exception($ret['error']['message'], '2001'); throw new \Exception($ret['error']['message'], '2011');
} }
return ['order_item_id'=>$order_item_id]; return ['order_item_id'=>$order_item_id];
...@@ -98,8 +101,12 @@ class RefundService ...@@ -98,8 +101,12 @@ class RefundService
} }
$object = $data['data']['object']; $object = $data['data']['object'];
if(empty($object['metadata']['app_id']) || $object['metadata']['app_id'] != "merchant-c") {
//非支付中心发出的订单,需要忽略
return ['id'=>$object['id']];
}
if($data['type'] == 'charge.succeeded') { if($data['type'] == 'refund.succeeded') {
$refund_order_id = $object['order_no']; $refund_order_id = $object['order_no'];
$refunded = $object['succeed']; //"succeed": true, $refunded = $object['succeed']; //"succeed": true,
} else { } else {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment