Commit e29c7899 authored by wanjilong's avatar wanjilong

add: 支付、回调、核销处理完成

parent 39684356
...@@ -16,9 +16,10 @@ class PayException extends BaseException ...@@ -16,9 +16,10 @@ class PayException extends BaseException
4 => '费率计算错误,费率分母为0', 4 => '费率计算错误,费率分母为0',
5 => '支付回调失败,请核对订单', 5 => '支付回调失败,请核对订单',
6 => '回调参数错误,请管理员关注', 6 => '回调参数错误,请管理员关注',
7 => '制定订单回调类型错误,请管理员关注', 7 => '订单回调类型错误,请管理员关注',
8 => '退款中订单不允许核销,请管理员关注', 8 => '退款中订单不允许核销,请管理员关注',
9 => '未支付订单不允许核销,请管理员关注', 9 => '未支付订单不允许核销,请管理员关注',
10 => '仅允许核销商家自己的订单,请管理员关注', 10 => '仅允许核销商家自己的订单,请管理员关注',
11 => '该订单已超时关闭,请重新下单',
]; ];
} }
...@@ -36,7 +36,7 @@ class PayService ...@@ -36,7 +36,7 @@ class PayService
public function do_pay($order_id, $user_id) public function do_pay($order_id, $user_id)
{ {
// 获取订单信息 + 子单信息 + 分润信息 // 获取订单信息
$data = OrderService::getOrderInfo($order_id, $user_id); $data = OrderService::getOrderInfo($order_id, $user_id);
if (empty($data['result'])) { if (empty($data['result'])) {
throw new PayException(['cus' => 1]); throw new PayException(['cus' => 1]);
...@@ -45,8 +45,6 @@ class PayService ...@@ -45,8 +45,6 @@ class PayService
$order = $data['result']; $order = $data['result'];
// 判断是否存在有效订单 // 判断是否存在有效订单
//$order['user_id'] = 'uid5d34843d013d8';
$expire_time = time() + 30 * 60; $expire_time = time() + 30 * 60;
$pay_order_id = $this->gen_pay_order_id($user_id); $pay_order_id = $this->gen_pay_order_id($user_id);
$pay_order = [ $pay_order = [
...@@ -59,7 +57,7 @@ class PayService ...@@ -59,7 +57,7 @@ class PayService
'pay_amount' => $order['payment'], 'pay_amount' => $order['payment'],
'third_order_id' => '', 'third_order_id' => '',
'expire_time' => date('Y-m-d H:i:s', $expire_time), 'expire_time' => date('Y-m-d H:i:s', $expire_time),
'source_name' => 1, 'source_name' => 10,
'service_name' => 1, 'service_name' => 1,
'extra' => json_encode([]), 'extra' => json_encode([]),
]; ];
...@@ -74,37 +72,37 @@ class PayService ...@@ -74,37 +72,37 @@ class PayService
throw new PayException(['cus' => 3]); throw new PayException(['cus' => 3]);
} }
$order['user_id'] = 'uid5d349de743119';
// 支持幂等,存在有效订单需要可以重复支付 // 支持幂等,存在有效订单需要可以重复支付
$ret = PingxxService::getInstance()->createOrder($order); $ret = PingxxService::getInstance()->createOrder($order);
if (!empty($ret['error'])) { if (!empty($ret['error'])) {
throw new \ErrorException($ret['error']['message'], '2001'); throw new \ErrorException($ret['error']['message'], '2001');
} }
if ($ret["status"] == 'paid' || $ret['status'] == 'refunded') {
if ($ret["status"] == 'paid') {
$edit = [ $edit = [
'pay_order_status' => Dictionary::O_PAY_STATUS_PAYED, 'pay_order_status' => Dictionary::O_PAY_STATUS_PAYED,
'third_order_id' => $ret['id'], 'third_order_id' => $ret['id'],
//'pay_channel'=>$ret['charge_essentials']['channel'], //'pay_channel'=>$ret['charge_essentials']['channel'],
]; ];
PayOrder::update($edit, ['pay_order_id' => $order['pay_order_id']]); PayOrder::update($edit, ['pay_order_id' => $order['pay_order_id']]);
throw new PayException(['cus' => 3]);
} elseif ($ret["status"] == 'created') { } elseif ($ret["status"] == 'canceled') {
$edit = [ $edit = [
'pay_order_status' => Dictionary::O_PAY_STATUS_WAIT, 'expire_time' => date('Y-m-d H:i:s'),
'third_order_id' => $ret['id'],
]; ];
PayOrder::update($edit, ['pay_order_id' => $order['pay_order_id']]); PayOrder::update($edit, ['pay_order_id' => $order['pay_order_id']]);
throw new PayException(['cus' => 11]);
} elseif ($ret["status"] == 'canceled') { } elseif ($ret["status"] == 'created') {
$edit = [ $edit = [
'expire_time' => date('Y-m-d H:i:s'), 'pay_order_status' => Dictionary::O_PAY_STATUS_WAIT,
'third_order_id' => $ret['id'],
]; ];
PayOrder::update($edit, ['pay_order_id' => $order['pay_order_id']]); PayOrder::update($edit, ['pay_order_id' => $order['pay_order_id']]);
} else { } else {
throw new PayException(['cus' => 0]);
} }
return $ret; return $ret;
...@@ -127,15 +125,31 @@ class PayService ...@@ -127,15 +125,31 @@ class PayService
$object = $data['data']['object']; $object = $data['data']['object'];
/* /*
$ping_data = PingxxService::getInstance()->getOrder($object['id']); $ping_data = PingxxService::getInstance()->getOrder($object['id']);
if($ping_data['status'] != 'paid') { if($ping_data['status'] != 'paid') {
throw new PayException(['cus' => 5]); throw new PayException(['cus' => 5]);
} //actual_amount 金额核对 } //actual_amount 金额核对
*/ */
// 修改状态,锁定业务 // 修改状态,锁定业务
$pay_order_id = $object['merchant_order_no']; $pay_order_id = $object['merchant_order_no'];
$edit = [
'pay_order_status' => Dictionary::O_PAY_STATUS_PAYED,
'pingxx_callback_success_time' => date('Y-m-d H:i:s'),
];
$where = [
'pay_order_id' => $pay_order_id,
'pay_order_status' => Dictionary::O_PAY_STATUS_WAIT
];
$cnt = PayOrder::update($edit, $where);
$pay_order = PayOrder::getMaster('*', ['pay_order_id' => $pay_order_id]);
if (empty($pay_order)) {
throw new PayException(['cus' => 5]);
}
$this->lock_pay_order($pay_order_id); if($cnt == 0 && $pay_order['pay_order_status'] == Dictionary::O_PAY_STATUS_PAYED) {
//保持幂等返回成功
return ['pay_order_id' => $pay_order_id];
}
//获取订单 + 子单 + 分销信息 //获取订单 + 子单 + 分销信息
$ret = OrderService::getFullOrderData($this->pay_order['order_id'], $this->pay_order['user_id']); $ret = OrderService::getFullOrderData($this->pay_order['order_id'], $this->pay_order['user_id']);
...@@ -143,6 +157,8 @@ class PayService ...@@ -143,6 +157,8 @@ class PayService
throw new PayException(['cus' => 1]); throw new PayException(['cus' => 1]);
} }
$this->pay_order = $pay_order;
// 生成支付清分单 // 生成支付清分单
$this->make_order_clearing($ret['result']); $this->make_order_clearing($ret['result']);
} }
...@@ -155,14 +171,19 @@ class PayService ...@@ -155,14 +171,19 @@ class PayService
*/ */
public function write_off($order_item_id, $life_account_id) public function write_off($order_item_id, $life_account_id)
{ {
//锁定状态
try{ try{
PayOrderItem::beginTransaction(); PayOrderItem::beginTransaction();
$cnt = PayOrderItem::update([
'notify_account_status' => 1,
], ['order_item_id' => $order_item_id, 'notify_account_status' => 0]);
$refund = RefundOrder::getMaster('*', ['order_item_id'=>$order_item_id]); $refund = RefundOrder::getMaster('*', ['order_item_id'=>$order_item_id]);
if(!empty($refund)) { if(!empty($refund)) {
throw new PayException(['cus'=>8]); throw new PayException(['cus'=>8]);
} }
$item = PayOrderItem::getMaster('*', ['order_item_id' => $order_item_id, 'notify_account_status' => 0]); $item = PayOrderItem::getMaster('*', ['order_item_id' => $order_item_id]);
if(empty($item)) { if(empty($item)) {
throw new PayException(['cus'=>9]); throw new PayException(['cus'=>9]);
} }
...@@ -172,17 +193,16 @@ class PayService ...@@ -172,17 +193,16 @@ class PayService
throw new PayException(['cus'=>10]); throw new PayException(['cus'=>10]);
} }
//锁定状态
PayOrderItem::update([
'notify_account_status' => 1,
], ['order_item_id' => $order_item_id, 'notify_account_status' => 0]);
PayOrderItem::commit(); PayOrderItem::commit();
}catch (\Exception $e) { }catch (\Exception $e) {
PayOrderItem::rollback(); PayOrderItem::rollback();
throw $e; throw $e;
} }
if($cnt == 0) {//幂等直接返回
return ['order_item_id' => $order_item_id];
}
$clearing_items = PayOrderClearingItem::select('*', $clearing_items = PayOrderClearingItem::select('*',
['order_item_id' => $item['order_item_id']] ['order_item_id' => $item['order_item_id']]
); );
...@@ -190,10 +210,13 @@ class PayService ...@@ -190,10 +210,13 @@ class PayService
$wallet_list = []; $wallet_list = [];
foreach ($clearing_items as $row) { foreach ($clearing_items as $row) {
$wallet_list[] = [ $wallet_list[] = [
'account_id' => $row['account_id'], 'user_id' => $row['account_id'],
'pay_amount' => $row['pay_amount'], 'service_name' => 10,
'pay_type' => $row['pay_type'], 'source_name' => 1,
'trade_id' => $row['pay_order_clearing_item_id'], 'amount' => $row['pay_amount'],
'third_order_id' => $row['pay_order_clearing_item_id'],
'third_order_id_type' => 1,
'third_order_desc' => '核销收入',
]; ];
} }
...@@ -204,50 +227,15 @@ class PayService ...@@ -204,50 +227,15 @@ class PayService
'notify_account_status' => 2, 'notify_account_status' => 2,
'notify_account_success_time' => date('Y-m-d H:i:s') 'notify_account_success_time' => date('Y-m-d H:i:s')
], ['order_item_id' => $order_item_id, 'notify_account_status' => 1]); ], ['order_item_id' => $order_item_id, 'notify_account_status' => 1]);
} else {
//补偿处理
} }
} }
return ['order_item_id' => $order_item_id]; return ['order_item_id' => $order_item_id];
} }
/**
* @param $pay_order_id
* @throws PayException
* 锁定支付状 态
*/
private function lock_pay_order($pay_order_id)
{
try {
PayOrder::beginTransaction();
$pay_order = PayOrder::getMaster('*', ['pay_order_id' => $pay_order_id]);
if (empty($pay_order)) {
throw new PayException(['cus' => 5]);
}
$this->pay_order = $pay_order;
/*
// 如果已经支付,返回成功保持幂等。
if($pay_order['pay_order_status'] == Dictionary::O_PAY_STATUS_PAYED) {
throw new PayException(['cus' => 0]);
}
*/
$edit = [
'pay_order_status' => Dictionary::O_PAY_STATUS_PAYED,
'pingxx_callback_success_time' => date('Y-m-d H:i:s'),
];
PayOrder::update($edit, ['pay_order_id' => $pay_order_id]);
PayOrder::commit();
} catch (Exception $e) {
PayOrder::rollback();
Logger::error($e->getMessage(), $edit);
throw $e;
}
}
/** /**
* @param $data * @param $data
* 构造订单流水 * 构造订单流水
...@@ -273,16 +261,9 @@ class PayService ...@@ -273,16 +261,9 @@ class PayService
} }
$wx_tip = $this->make_tip_clearing(); //微信手续费 $wx_tip = $this->make_tip_clearing(); //微信手续费
/*
$subsidy_tip = $this->make_platform_subsidy_clearing(); //系统补贴
$merchant_tip = $this->make_merchant_subsidy_clearing(); //商家补贴
*/
$distribution_tip = $this->make_distribution_clearing(); //团长收益 $distribution_tip = $this->make_distribution_clearing(); //团长收益
$platform_tip = $this->make_platform_clearing(); //平台收益 $platform_tip = $this->make_platform_clearing(); //平台收益
$merchant_cash = $this->order_info['payment'] - $wx_tip - $distribution_tip - $platform_tip; $merchant_cash = $this->order_info['payment'] - $wx_tip - $distribution_tip - $platform_tip;
$this->make_merchant_clearing($merchant_cash); //商户收益 $this->make_merchant_clearing($merchant_cash); //商户收益
try { try {
...@@ -304,10 +285,14 @@ class PayService ...@@ -304,10 +285,14 @@ class PayService
if ($this->wallet_list) { if ($this->wallet_list) {
$ret = WalletService::send($this->wallet_list); $ret = WalletService::send($this->wallet_list);
PayOrderItem::update([ if($ret) {
'notify_account_status' => 2, PayOrderItem::update([
'notify_account_success_time' => date('Y-m-d H:i:s') 'notify_account_status' => 2,
], ['pay_order_id' => $this->pay_order['order_id'], 'notify_account_status' => 1]); 'notify_account_success_time' => date('Y-m-d H:i:s')
], ['pay_order_id' => $this->pay_order['order_id'], 'notify_account_status' => 1]);
} else {
//todo 补偿处理
}
} }
} }
...@@ -392,7 +377,7 @@ class PayService ...@@ -392,7 +377,7 @@ class PayService
$account = [ $account = [
'account_id' => '100020003201', 'account_id' => '100020003201',
'amount' => 0, 'amount' => 0,
'rate' => 60, 'rate' => 3000,
'title' => '平台收益', 'title' => '平台收益',
]; ];
...@@ -525,8 +510,9 @@ class PayService ...@@ -525,8 +510,9 @@ class PayService
foreach ($this->order_items as $r) { foreach ($this->order_items as $r) {
$current_tip = Strategy::getTip($r['payment'], $total_amount, $cleared_amount, $total_tip, $cleared_tip); $current_tip = Strategy::getTip($r['payment'], $total_amount, $cleared_amount, $total_tip, $cleared_tip);
$id = $this->gen_pay_order_clearing_item_id();
$this->clear_items_list[] = [ $this->clear_items_list[] = [
'pay_order_clearing_item_id' => $this->gen_pay_order_clearing_item_id(), 'pay_order_clearing_item_id' => $id,
'pay_order_clearing_id' => $pay_order_clearing_id, 'pay_order_clearing_id' => $pay_order_clearing_id,
'pay_order_id' => $this->pay_order['pay_order_id'], 'pay_order_id' => $this->pay_order['pay_order_id'],
'order_id' => $this->pay_order['order_id'], 'order_id' => $this->pay_order['order_id'],
...@@ -542,11 +528,13 @@ class PayService ...@@ -542,11 +528,13 @@ class PayService
// 收集直接到账信息 // 收集直接到账信息
if($r['marketing_type'] == 1 && $current_tip > 0) { if($r['marketing_type'] == 1 && $current_tip > 0) {
$this->wallet_list[] = [ $this->wallet_list[] = [
'account_id' => $account['account_id'], 'user_id' => $account['account_id'],
'account_type' => $account['account_type'], 'service_name' => 10,
'pay_amount' => $current_tip, 'source_name' => 1,
'pay_type' => $account['pay_type'], 'amount' => $current_tip,
'pay_sub_type' => $account['pay_sub_type'], 'third_order_id' => $id,
'third_order_id_type' => 1,
'third_order_desc' => '订单收入',
]; ];
} }
...@@ -555,36 +543,6 @@ class PayService ...@@ -555,36 +543,6 @@ class PayService
} }
} }
/**
* @param $order_id
* @param $user_id
* @return string[]
* 获取支付订单的营销补贴,返回补贴出款账号,补贴金额,补贴原因
*/
private function get_marketing_subsidy()
{
return [
'account_id' => '100020003001',
'amount' => 1000,
'title' => '营销专号支付补贴',
];
}
/**
* @param $order
* @return string[]
* 获取订单优惠券补贴,一般来自订单,需要这里完善出款账号 + 原因
*/
private function get_coupon_subsidy($order)
{
return [
'account_id' => '100020002001',
'amount' => '0',
'title' => '营销专号支付补贴',
];
}
private function gen_pay_order_id($user_id) private function gen_pay_order_id($user_id)
{ {
$number = substr($user_id, -2); $number = substr($user_id, -2);
...@@ -633,13 +591,4 @@ class PayService ...@@ -633,13 +591,4 @@ class PayService
$params = ['life_account_id' => $life_account_id]; $params = ['life_account_id' => $life_account_id];
return Sdk::call($url, $params); return Sdk::call($url, $params);
} }
/**
* @param $data
* 构造订单支付订单信息
*/
private function make_new_pay($data)
{
$this->make_new_pay_order($data['order']);
}
} }
\ No newline at end of file
...@@ -16,9 +16,9 @@ class PingxxService ...@@ -16,9 +16,9 @@ class PingxxService
private function __construct() private function __construct()
{ {
Pingpp::setApiKey('sk_test_ibbTe5jLGCi5rzfH4OqPW9KC'); // 设置 API Key Pingpp::setApiKey('sk_test_KCaD0O5KyjzPinLynHzH4Cu1'); // 设置 API Key
Pingpp::setPrivateKeyPath(ROOT_PATH . '/conf/your_rsa_private_key.pem'); // 设置私钥 Pingpp::setPrivateKeyPath(ROOT_PATH . '/conf/your_rsa_private_key.pem'); // 设置私钥
Pingpp::setAppId('app_1Gqj58ynP0mHeX1q'); // 设置 App ID Pingpp::setAppId('app_9m1ubDG4e1mPXLCG'); // 设置 App ID
} }
private function __clone() {} private function __clone() {}
......
-----BEGIN PUBLIC KEY----- -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0d0QxZFYeHXGeWWneib MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA40SSetBwtgeo3pp0HQ6E
4Q0jUFjj4ro7bMnIJ8DjZ4w2NtLJi8p1mcFMbrIS5g95U5FUBCfAZXFb2QIaJfft MMIyuaymKTolB13unvkqB0PjoPS9syRQrzLGjPZjWUMJiHAehNvsOdqghmP0F995
BByCQRbon7Jb97XoTP6kfk65tLz8Q9Cank1Ah/qivPIY0aNwvq8stedq9rcuJ6OQ UwncMwZY6XW/7wEMeEZmvx7pmLsulrZrzbsmBCMdcpNduLmN/wTUgDjjUTw5WRY0
ncbfQ1217/Za50vKotYa+MEcFo9Y65biEmzq7BZeNYzuU4dGrPaCi917cfwNa8ey R2AXuTLPrShUVCUbtTdqFlHCLKn7s/QGj2ZrGmnwBNWq1SOnHGJsnLaHSjC/NZRs
ZSpoIOBe8e5JGOtZKCfgsgfecbXxdh6jq8Qn6mmrJILapEdxlj4xfzBzAuM3snqt VHUW7cKXjiVDz0nQR0nRJBCEk7CJCt/0h4hfoGU1Sg7rW0pqmJObCoE3hru7yOf4
5XnDzzFWlI5Z+4lhyZr7eFVmnQSqn1HWt4VPzz/EWvxP8Rkvy89XuRXBAiO3/7Ur DVCT9PLccCTN3UzXBSg4uHMU6N15KiO9+FmVwnVAe4feEq4Ts9K4jD5oJ9XYFyI7
8wIDAQAB /wIDAQAB
-----END PUBLIC KEY----- -----END PUBLIC KEY-----
\ No newline at end of file
-----BEGIN RSA PRIVATE KEY----- -----BEGIN PRIVATE KEY-----
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
RIz377sC1KafBjHHO/1ooQKBgDQqfJrZv2ppquVTKH9pF/pwMq68daL7JkOXERqT 3Zuvi9vF+4SJw1G2H+Tk4CObKMm6gjJQK8ySiYs7C691E9ifPTKYAZ+gvwKBgCne
iGYbwQqozJ+q2Y3Iu2gi6o/rVl0SggAWoM0TitKP0+dCQcYx7+imAK3GFv1KexyP Pwl/3tV0JhMugz8wZYzui2Q/8zHpT6DraSAstXJJPNNJDqe2XvR1a0BfmxLzoVj2
Xs3WzO8Dc7ti42fr3qPjJG7g7PSfzwoME5iSNjX0MFZdlT1Q2dJwS4uXEsJO3yIj J05l79MdenZ8SXMmx2EAhB9UKwZir+S4TKgKvSwkCpP/Mr8yrNG4dCQEi/rWQ+bM
XS/9AoGBALRApgtUA7Odw4tjCLGvxXuLFnyRkg6hFqoXAP2j8H9bJDOlSSVwQTFd mzXcaRlegys9/sBdVr0XbUzisO6v/TMyJ4d+J/OpAoGBAKqxEqdBQjwUaRUUzjrx
ahbcIDtQJS57vXUGK2uspbFKLm1WCFzPVyuxDIW6oue/kO+YxxU3NA58zk8oaORq epV3nF0AmzYlD/e6VFpAVuqa9Tn0uX8WdoxBpYsnNLpYpff58g+zb+m1nd9/KfEm
eA3YvHc7ZmRjVnVkxnXjKofrL6jF5A+lXSXnXchrv2ZYI+1pOsIV sv7BFH0FK7crdIgVm4bT3KIBfTM3QfGiK4G7hHjeJl54Stx+krNZPqWLwsbn3u9H
-----END RSA PRIVATE KEY----- gTJ1bEEDuPNf2lpM3zYDNMl4
\ No newline at end of file -----END PRIVATE KEY-----
\ No newline at end of file
-----BEGIN PUBLIC KEY----- -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2MktxcKBEqdYRi2IgYc MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqZN47zufaGGljso4qxzi
upPQIN5cxgiBL5udCCBJBNBbXPaquOE1qspfhB1KUzHXATnCONiSzubLcBTnwi2t IN6i0d15K2bXUdZDanS89XYIFycysZnl/kS7IGOugkD4qQS3zpqVzt/YQ+p5X9gB
z0ErRCeJZSERRCpbKx4eu6b1neUTWkga7xpZxWONEvkmZo5Nlhf4fXRPUYnO/bdG caE3AJxtaEoXVedgMTb4qKWfAfmVpiArR8lT5rK64PBqSx3LeJXjhweZPBrfvJov
CNGpQ/HSJfWLtzmhCqO1aJwVhcDmDMYz4bTkZavhFBdVyXf/8n7UKylk03eymlKJ XZwyY1XdD3WgeZIPUmyr9LfZVK1VDgrBQ/LU25ZkCQwTqhQtzR684dLkyKhec0Vs
1swQpeFcxaKfzsk1mJU7mc93mCWjaR+VWkNbw4AQHDyHgbzH+zYARzCluiy5hXdi lFkxbn+swDIq8a3UnSlh/FetdK+mChF1CpSzJSv7MS0Jk4fElW/6JbXJTtXcT2TF
xGEP+iO4ZBk48rEs1hKTvGz1k+jhLCdkdpBRjq0pK/htjA3Ce8pF2AJs+fgN6ZUu mW6envw25y4+Mb8DxBPYwZ2MBzz8/BimKSZhppMWOCJHnBIxLB/5KPDkNYhLfjOl
mQIDAQAB 9QIDAQAB
-----END PUBLIC KEY----- -----END PUBLIC KEY-----
\ No newline at end of file
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