161 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| 
 | |
| namespace app\api\controller;
 | |
| 
 | |
| use app\api\logic\PayLogic;
 | |
| use app\common\basics\Api;
 | |
| use app\common\enum\OrderEnum;
 | |
| use app\common\enum\PayEnum;
 | |
| use app\common\model\Client_;
 | |
| use app\common\model\order\OrderTrade;
 | |
| use app\common\model\order\Order;
 | |
| use app\common\model\order\OrderLog;
 | |
| use app\common\server\AliPayServer;
 | |
| use app\common\server\JsonServer;
 | |
| use app\common\model\Test;
 | |
| use app\common\server\WeChatPayServer;
 | |
| use app\common\server\WeChatServer;
 | |
| use app\common\model\integral\IntegralOrder;
 | |
| 
 | |
| /**
 | |
|  * Class Pay
 | |
|  * @package app\api\controller
 | |
|  */
 | |
| class Pay extends Api
 | |
| {
 | |
|     public $like_not_need_login = ['notifyMnp', 'notifyOa', 'notifyApp', 'aliNotify'];
 | |
| 
 | |
|     /**
 | |
|      * @notes 支付入口
 | |
|      * @return \think\response\Json
 | |
|      * @throws \think\db\exception\DataNotFoundException
 | |
|      * @throws \think\db\exception\DbException
 | |
|      * @throws \think\db\exception\ModelNotFoundException
 | |
|      * @author suny
 | |
|      * @date 2021/7/13 6:13 下午
 | |
|      */
 | |
|     public function unifiedpay()
 | |
|     {
 | |
|         $post = $this->request->post();
 | |
|         if(!isset($post['pay_way'])) {
 | |
|             return JsonServer::error('请选择支付方式');
 | |
|         }
 | |
|         if ($post['from'] == 'order') {
 | |
|             // 更新支付方式
 | |
|             $order = Order::findOrEmpty($post['order_id']);
 | |
|             $order->pay_way = $post['pay_way'];
 | |
|             $order->save();
 | |
|             $pay_way = $order['pay_way'];
 | |
|         }
 | |
|         if ($post['from'] == 'trade') {
 | |
|             $order = Order::where('trade_id', $post['order_id'])->findOrEmpty();
 | |
|             // 更新支付方式
 | |
|             Order::where('trade_id', $post['order_id'])->update(['pay_way' => $post['pay_way']]);
 | |
|             $pay_way = $post['pay_way'];
 | |
|         }
 | |
|         if ($post['from'] == 'recharge') {
 | |
|             $pay_way = isset($post['pay_way']) ? $post['pay_way'] : PayEnum::WECHAT_PAY;
 | |
|         }
 | |
| 
 | |
|         // 积分订单
 | |
|         if ($post['from'] == 'integral') {
 | |
|             $order = IntegralOrder::findOrEmpty($post['order_id']);
 | |
|             IntegralOrder::where('id', $post['order_id'])->update(['pay_way' => $post['pay_way']]);
 | |
|             $pay_way = $post['pay_way'];
 | |
|         }
 | |
| 
 | |
|         // order,trade方式金额为0直接走余额支付
 | |
|         if (isset($order) && $order['order_amount'] == 0) {
 | |
|             $result = PayLogic::balancePay($post['order_id'], $post['from']);
 | |
|             return $result;
 | |
|         }
 | |
|         switch ($pay_way) {
 | |
|             case OrderEnum::PAY_WAY_BALANCE://余额支付
 | |
|                 $result = PayLogic::balancePay($post['order_id'], $post['from']);
 | |
|                 break;
 | |
|             case OrderEnum::PAY_WAY_WECHAT://微信支付
 | |
|                 // openid为空 且在小程序或公众号中支付时 必填openid
 | |
|                 if (empty($post['openid']) && in_array($this->client, [Client_::mnp, Client_::oa])) {
 | |
|                     //微信支付时必须传openid过来
 | |
|                     return JsonServer::error('缺少openid');
 | |
|                 }
 | |
|                 $result = PayLogic::wechatPay($post['order_id'], $post['from'], $this->client, $post['openid'] ?? '');
 | |
|                 break;
 | |
|             case OrderEnum::PAY_WAY_ALIPAY://支付宝支付
 | |
|                 $result = PayLogic::aliPay($post['order_id'], $post['from'],$this->client);
 | |
|                 $data = [
 | |
|                     'code' => 10001,
 | |
|                     'msg' => '发起成功',
 | |
|                     'data' => $result,
 | |
|                     'show' => 0,
 | |
|                 ];
 | |
|                 return json($data);
 | |
|                 break;
 | |
|         }
 | |
| 
 | |
|         return $result;
 | |
| 
 | |
|     }
 | |
| 
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * @notes 小程序回调
 | |
|      * @throws \EasyWeChat\Kernel\Exceptions\Exception
 | |
|      * @author suny
 | |
|      * @date 2021/7/13 6:13 下午
 | |
|      */
 | |
|     public function notifyMnp()
 | |
|     {
 | |
| 
 | |
|         $config = WeChatServer::getPayConfig(Client_::mnp);
 | |
|         return WeChatPayServer::notify($config);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * @notes 公众号回调
 | |
|      * @throws \EasyWeChat\Kernel\Exceptions\Exception
 | |
|      * @author suny
 | |
|      * @date 2021/7/13 6:13 下午
 | |
|      */
 | |
|     public function notifyOa()
 | |
|     {
 | |
| 
 | |
|         $config = WeChatServer::getPayConfig(Client_::oa);
 | |
|         return WeChatPayServer::notify($config);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * @notes APP回调
 | |
|      * @throws \EasyWeChat\Kernel\Exceptions\Exception
 | |
|      * @author suny
 | |
|      * @date 2021/7/13 6:14 下午
 | |
|      */
 | |
|     public function notifyApp()
 | |
|     {
 | |
| 
 | |
|         $config = WeChatServer::getPayConfig(Client_::ios);
 | |
|         return WeChatPayServer::notify($config);
 | |
|     }
 | |
| 
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * @notes 支付宝回调
 | |
|      * @return bool
 | |
|      * @author suny
 | |
|      * @date 2021/7/13 6:14 下午
 | |
|      */
 | |
|     public function aliNotify()
 | |
|     {
 | |
|         $data = $this->request->post();
 | |
|         $result = (new AliPayServer())->verifyNotify($data);
 | |
|         if (true === $result) {
 | |
|             echo 'success';
 | |
|         } else {
 | |
|             echo 'fail';
 | |
|         }
 | |
|     }
 | |
| } |