seven 1 هفته پیش
والد
کامیت
22a0786b73

+ 9 - 5
app/Http/Controllers/admin/Wallet.php

@@ -19,6 +19,7 @@ use App\Services\IssueService;
 use App\Services\GameplayRuleService;
 use App\Models\Config;
 use App\Services\ConfigService;
+use App\Services\Payment\QianBaoService;
 use App\Services\Payment\SanJinService;
 use App\Services\PaymentOrderService;
 
@@ -282,13 +283,16 @@ class Wallet extends Controller
         // $awards = IssueService::award([7,7,7]);
         // $result = BetService::betSettled2('3356003',$awards);
         // $result = IssueService::sendLotteryImage($memberId, 3356000);
-        // $order_no = SanJinService::createOrderNo();
+        // $order_no = QianBaoService::createOrderNo();
         // echo $order_no;
-        // $result = SanJinService::pay(100,$order_no);
-        // $result = SanJinService::payout(100,$order_no,'厦门银行','张三',1245679451259741541,SanJinService::ALIPAY_TO_ALIPAY);
-        // $result = PaymentOrderService::createPayout($memberId,100,SanJinService::ALIPAY_TO_ALIPAY,'支付宝','张三','17605957777');
+        // $result = QianBaoService::pay(100,$order_no);
+        // $result = QianBaoService::payout(100,$order_no,'厦门银行','张三',1245679451259741541,QianBaoService::ALIPAY_TO_ALIPAY);
+        // $result = PaymentOrderService::createPayout($memberId,100,QianBaoService::ALIPAY_TO_ALIPAY,'支付宝','张三','17605957777');
         // PaymentOrderService::sendMessage($result['chat_id'],$result['text']);
-        $result = PaymentOrderService::createPay($memberId,100,SanJinService::PAY_ZFB1,'张三');
+        // $result = PaymentOrderService::createPay($memberId,100,QianBaoService::PAY_ZFB1,'张三');
+        // $result = mb_strlen('哈哈哈123ABC');
+        $order_no = SanJinService::createOrderNo();
+        $result = SanJinService::pay(10000,$order_no);
         echo "<pre>";
         var_dump($result);
     }

+ 11 - 0
app/Http/Controllers/api/Pay.php

@@ -30,4 +30,15 @@ class Pay extends Controller
         echo 'success';
     }
 
+    // 用户支付异步通知
+    public function harvestHandle(Request $request)
+    {
+        $data = $request->all();
+        // 记录到专用支付日志
+        Log::channel('payment')->info('三斤支付回调', $data);
+
+
+        echo 'success';
+    }
+
 }

+ 1 - 1
app/Services/Payment/QianBaoService.php

@@ -147,7 +147,7 @@ class QianBaoService extends BaseService
         $signStr = $merchant_id .  $order_no . $amount . $secret;
         $sign = md5($signStr);
         $data['sign'] = $sign;
-        var_dump($data);
+        
         $client = self::getClient();
         $response = $client->post('api/pay', [
                 'form_params' => $data,

+ 97 - 0
app/Services/Payment/SanJinService.php

@@ -0,0 +1,97 @@
+<?php 
+
+namespace App\Services\Payment;
+
+use GuzzleHttp\Client;
+use GuzzleHttp\Exception\RequestException;
+use GuzzleHttp\Psr7\Response;
+use App\Services\BaseService;
+
+class SanJinService extends BaseService
+{
+    const REQUEST_URL = 'https://jkapi-sanjin.jkccb.com/';
+
+    const PRODUCT_TEST = 'T888'; // 测试支付通道
+
+    // 获取商户ID
+    public static function getMerchantId()
+    {
+        return config('app.tree_pay_mch_id');
+    }
+    // 获取商户秘钥
+    public static function getSecret()
+    {
+        return config('app.tree_pay_key');
+    }
+
+    // 获取异步的通知地址
+    public static function getNotifyUrl()
+    {
+        return 'https://botpc28.testx2.cc/api/pay/harvest';
+    }
+
+
+    /**
+     * @description: 获取请求客户端
+     * @return {*}
+     */
+    public static function getClient(): Client
+    {
+        return new Client([
+            'base_uri' => self::REQUEST_URL,
+            'timeout' => 5.0,
+        ]);
+    }
+
+    // 签名
+    public static function signature($params = [],$must = [])
+    {
+        if($must){
+            foreach($params as $k => $v){
+                if(!in_array($k,$must)){
+                    unset($params[$k]);
+                }
+            }
+        }
+
+        ksort($params, SORT_STRING);
+        $parts = [];
+        foreach($params as $k => $v){
+            array_push($parts,$k.'='.$v);
+        }
+        $mch_key = self::getSecret();
+        $parts[] = "key=".$mch_key;
+        $sign = md5(implode('&',$parts));
+        return $sign;
+    }
+
+    public static function pay($amount,$orderNo,$type = self::PRODUCT_TEST)
+    {
+
+        $must = ['mchId','productId','outTradeNo','amount','reqTime','notifyUrl'];
+        $mch_id = self::getMerchantId();
+
+        
+        
+        $data = [];
+        $data['mchId'] = $mch_id;
+        $data['amount'] = $amount;
+        $data['outTradeNo'] = $orderNo;
+        $data['notifyUrl'] = self::getNotifyUrl();
+        $data['reqTime'] = microtime(true) * 1000;
+        $data['productId'] = $type;
+
+        
+        $data['sign'] = self::signature($data,$must);
+        $client = self::getClient();
+        $response = $client->post('api/pay', [
+            'json' => $data,
+            'headers' => [
+                'Content-Type' => 'application/json',
+            ]
+        ]);
+
+        $body = $response->getBody();
+        return json_decode($body->getContents(), true);
+    }
+}

+ 3 - 0
config/app.php

@@ -11,6 +11,9 @@ return [
     // 第三方支付配置
     'tree_payment_merchant_id' => env('TREE_PAYMENT_MERCHANT_ID',''),
     'tree_payment_secret' => env('TREE_PAYMENT_SECRET',''),
+    // 第三方收款配置
+    'tree_pay_mch_id' => env('TREE_PAY_MCH_ID',''),
+    'tree_pay_key' => env('TREE_PAY_MCH_KEY',''),
     /*
     |--------------------------------------------------------------------------
     | Application Name

+ 1 - 0
routes/api.php

@@ -31,6 +31,7 @@ Route::prefix('/issue')->group(function () {
 Route::get('/test', [Home::class, 'test']);
 Route::prefix('/pay')->group(function () {
     Route::post("/notify", [Pay::class, 'notifyHandle']);
+    Route::post("/harvest", [Pay::class, 'harvestHandle']);
 });