123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 |
- <?php
- namespace app\index\controller;
- use addons\epay\library\Service;
- use app\common\controller\Frontend;
- use app\common\model\MobileOrder;
- use app\common\model\RefundLog;
- use app\common\service\SmsSend;
- use app\service\byte_dance\ByteDancePayNotify;
- use app\service\byte_dance\ByteDanceQueryOrder;
- use app\service\byte_dance\ByteDanceQueryRefund;
- use app\service\byte_dance\ByteDanceSettleQuery;
- use app\service\byte_dance\OceanEngineService;
- use app\service\fast_hand\KsClient;
- use app\service\fast_hand\OrderQuery;
- use app\service\fast_hand\RefundQuery;
- use app\service\fast_hand\SettleQuery;
- use think\App;
- use think\Db;
- class Payment extends Frontend
- {
- protected $noNeedLogin='*';
-
- public function notify($type,$order_no)
- {
- $check=Service::checkNotify($type);
- if (!$check) {
- echo '签名错误';
- return;
- }
- $data=$check->verify();
- if($this->paySucc($order_no,$data,$type)){
- return "success";
- }
- return 'FAIL';
- }
- protected function paySucc($order_no,$data,$type){
- $name="payment/$type/{$order_no}";
- user_log($name,$data);
- Db::startTrans();
- $payment=\app\common\model\Payment::where('order_no',$order_no)->lock(true)->find();
- if(!$payment){
- user_log($name,"支付没找到");
- Db::rollback();
- return true;
- }
- if($payment['pay_time']){
- user_log($name,"支付已支付");
- Db::rollback();
- return true;
- }
- $payment['pay_time']=time();
- if(!$payment->save()){
- user_log($name,"支付保存失败");
- Db::rollback();
- return false;
- }
- $mobileOrder=MobileOrder::where('id',$payment['mobile_order_id'])->find();
- if(!$mobileOrder){
- user_log($name,"手机订单不存在");
- Db::rollback();
- return true;
- }
- try {
- $mobileOrder->paySuccessCallback($payment,$data,$type);
- Db::commit();
- }catch (\Exception $e){
- user_log($name,[$e->getMessage(),$e->getFile(),$e->getLine()]);
- Db::rollback();
- return false;
- }
- try {
- OceanEngineService::setQuery($payment['params']?:[])->setAddon(['order_no'=>$order_no])->shopping();
- }catch (\Exception $e){}
- return true;
- }
-
- public function notify_jd($order_no)
- {
- $name="pay/jd/{$order_no}";
- Db::startTrans();
- $payment=\app\common\model\Payment::where('order_no',$order_no)->lock(true)->find();
- if(!$payment){
- user_log($name,"支付没找到");
- Db::rollback();
- return '支付没找到';
- }
- if($payment['pay_time']){
- user_log($name,"支付已支付");
- Db::rollback();
- return '支付已支付';
- }
- $payment['pay_time']=time();
- if(!$payment->save()){
- user_log($name,"支付保存失败");
- Db::rollback();
- return '支付保存失败';
- }
- Db::commit();
- Db::startTrans();
- $mobileOrder=MobileOrder::where('id',$payment['mobile_order_id'])->find();
- if(!$mobileOrder){
- user_log($name,"手机订单不存在");
- Db::rollback();
- return '手机订单不存在';
- }
- if($mobileOrder['pay_time']){
- user_log($name,"手机订单已支付");
- Db::rollback();
- return '手机订单已支付';
- }
- $mobileOrder['status']=MobileOrder::STATUS_WAIT_SEND;
- $mobileOrder['pay_type']=3;
- $mobileOrder['pay_time']=$payment['pay_time'];
- $mobileOrder['payment_id']=$payment['id'];
- if(!$mobileOrder->save()){
- user_log($name,"手机订单保存失败");
- Db::rollback();
- return '手机订单保存失败';
- }
- Db::commit();
-
-
- return 'success';
- }
- public function refund_url($type,$order){
- Db::startTrans();
- $payment=\app\common\model\Payment::where('refund_no',$order)->find();
- if(!$payment){
- goto ERROR;
- }
- if($payment['refund_status']==2) {
- goto ERROR;
- }
- if($type=='dy'){
- $succ=true;
- $query=new ByteDanceQueryRefund();
- $query->setOrderNo($order);
- $payment['refund_data']=input();
- if($query->get()){
- $payment['refund_query_data']=$query->getData();
- $payment->refundSuccess();
- }else{
- $succ=false;
- $payment['refund_status']=3;
- }
- $payment->save();
- Db::commit();
- return ByteDanceQueryRefund::notify($succ);
- }elseif ($type=='ks'){
- list($ok,$msg,$data)=(new RefundQuery)->setNo($payment['refund_no'])->success();
- user_log('ksRefundQuery',compact('order','data'));
- if(!$ok){
- Db::rollback();
- return KsClient::result(0,$msg);
- }else{
- $payment['refund_query_data']=$data;
- $payment->refundSuccess();
- Db::commit();
- return KsClient::result(1,'success');
- }
- }
- ERROR:
- Db::rollback();
- return json(['error'=>'error'],422);
- }
- public function notify_dy($order_no){
- $info=[
- 'err_no'=>0,
- 'err_tips'=>'success',
- ];
- $postData=input();
- user_log('dyPayNotify',$postData);
- $payed=(new ByteDanceQueryOrder())->setOrderNo($postData['order_no'])->get();
- if(!$payed){
- $info['err_no']=1;
- $info['err_tips']='not pay';
- return json($info);
- }
- if($this->paySucc($order_no,json_decode(html_entity_decode(html_entity_decode($postData['msg'])),true),'dy')){
- return json($info);
- }
- $info['err_no']=2;
- $info['err_tips']='fail';
- return json($info);
- }
- public function notify_dy_two($order_no){
- $info=[
- 'err_no'=>0,
- 'err_tips'=>'success',
- ];
- $postData=input();
- user_log('dyPayNotify',$postData);
- $payed=(new ByteDanceQueryOrder())->setOrderNo($postData['order_no'])->getWangKa();
- if(!$payed){
- $info['err_no']=1;
- $info['err_tips']='not pay';
- return json($info);
- }
- if($this->paySucc($order_no,json_decode(html_entity_decode(html_entity_decode($postData['msg'])),true),'dy')){
- return json($info);
- }
- $info['err_no']=2;
- $info['err_tips']='fail';
- return json($info);
- }
- public function notify_dy_three($order_no){
- $info=[
- 'err_no'=>0,
- 'err_tips'=>'success',
- ];
- $postData=input();
- user_log('dyPayNotify',$postData);
- $payed=(new ByteDanceQueryOrder())->setOrderNo($postData['order_no'])->getHaoYuan();
- if(!$payed){
- $info['err_no']=1;
- $info['err_tips']='not pay';
- return json($info);
- }
- if($this->paySucc($order_no,json_decode(html_entity_decode(html_entity_decode($postData['msg'])),true),'dy')){
- return json($info);
- }
- $info['err_no']=2;
- $info['err_tips']='fail';
- return json($info);
- }
- public function settle_dy($no){
- $data=input();
- $payment=\app\common\model\Payment::where('settle_no',$no)->find();
- if($payment){
- user_log('settle_dy',$data);
- $payment['settle_data']=$data;
- $query=new ByteDanceSettleQuery();
- $query->setPayment($payment);
- $success=$query->get();
- $payment->settleSuccess($success,$query->getData());
- if($success){
- return json([
- 'err_no'=>0,
- 'err_tips'=>'success',
- ]);
- }else{
- return json([
- 'err_no'=>1,
- 'err_tips'=>'error',
- ]);
- }
- }
- return json([
- 'err_no'=>2,
- 'err_tips'=>'error',
- ]);
- }
- public function settle_ks($no){
- $data=input();
- $payment=\app\common\model\Payment::where('settle_no',$no)->find();
- if($payment){
- user_log('settle_ks',$data);
- $payment['settle_data']=$data;
- $query=new SettleQuery();
- $query->setOrder($payment);
- list($success,$msg,$data)=$query->get();
- $payment->settleSuccess($success,$data);
- if($success){
- return KsClient::result(1,'success');
- }else{
- return KsClient::result(0,$msg);
- }
- }
- return KsClient::result(0,'error');
- }
- public function notify_ks($order_no){
- $result = file_get_contents('php://input');
- $result = json_decode($result, true);
- $kwaisign = isset($_SERVER['HTTP_KWAISIGN']) ? $_SERVER['HTTP_KWAISIGN'] : '';
- $info=[
- 'result'=>1,
- 'message_id'=>'success',
- ];
- user_log('ksPayNotify',$result);
-
- if($result['data']['status'] == 'SUCCESS'){
- $result['data']['appid']=$result['app_id'];
- $appSecret = config('kuaishou.appsecret');
- $resulta = json_encode($result);
- $notify = md5($resulta.$appSecret);
- $succ=OrderQuery::setNo($result['data']['out_order_no'])->success();
- if($succ){
-
- if($this->paySucc($order_no,$result['data'],'ks')){
- return json($info);
- }
- }
- $info['result']=2;
- $info['message_id']='fail';
- return json($info);
- }
- }
- }
|