Bläddra i källkod

feat: 订单同步

xiansin 2 år sedan
förälder
incheckning
f0aade4f4c

+ 26 - 0
server/app/Helper/ByteDance.php

@@ -4,6 +4,7 @@ namespace App\Helper;
 
 
 use App\Helper\UniPlatform\BaseAPI;
 use App\Helper\UniPlatform\BaseAPI;
 use App\Helper\UniPlatform\BaseUniPlatform;
 use App\Helper\UniPlatform\BaseUniPlatform;
+use Carbon\Carbon;
 use GuzzleHttp\Client;
 use GuzzleHttp\Client;
 use GuzzleHttp\Exception\GuzzleException;
 use GuzzleHttp\Exception\GuzzleException;
 
 
@@ -128,6 +129,31 @@ class ByteDance extends BaseUniPlatform
         return sha1(trim(implode('', $filtered)));
         return sha1(trim(implode('', $filtered)));
     }
     }
 
 
+    public function pushOrder($openid, $orderId, $goods)
+    {
+        $data = [
+            'access_token' => $this->accessToken,
+            'open_id'      => $openid,
+            'order_type'   => 0, // 0:普通小程序订单(非 POI 订单),
+            'order_detail' => [
+                'order_id'    => $orderId,
+                'create_time' => (int)Carbon::now()->getPreciseTimestamp(3),
+                'status'      => '已支付',
+                'amount'      => 1,
+                'total_price' => '',
+                'detail_url'  => 'pages/my/consume',
+                'item_list'   => [
+                    'item_code' => $goods['id'], // 商品ID,
+                    'img'       => $goods['img'],
+                    'title'     => $goods['title'],
+                    'price'     => $goods['price'],
+                ]
+            ],
+            'update_time'  => (int)Carbon::now()->getPreciseTimestamp(3)
+        ];
+        return $this->post($this->API::ORDER_PUSH, $data);
+    }
+
 
 
     /**
     /**
      * @param string $code
      * @param string $code

+ 1 - 0
server/app/Helper/UniPlatform/BaseAPI.php

@@ -6,4 +6,5 @@ abstract class BaseAPI
     const ACCESS_TOKEN = '';
     const ACCESS_TOKEN = '';
     const LOGIN = '';
     const LOGIN = '';
     const CREATE_ORDER = '';
     const CREATE_ORDER = '';
+    const ORDER_PUSH = '';
 }
 }

+ 6 - 0
server/app/Helper/UniPlatform/Bytedance/ByteDanceAPI.php

@@ -26,4 +26,10 @@ final class ByteDanceAPI extends BaseAPI
      * @url https://microapp.bytedance.com/docs/zh-CN/mini-app/develop/server/ecpay/introduction
      * @url https://microapp.bytedance.com/docs/zh-CN/mini-app/develop/server/ecpay/introduction
      */
      */
     const CREATE_ORDER = PAY_URL.'/ecpay/v1/create_order';
     const CREATE_ORDER = PAY_URL.'/ecpay/v1/create_order';
+
+    /**
+     * 订单同步
+     * @url https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/server/ecpay/order/order-sync/
+     */
+    const ORDER_PUSH = PAY_URL.'/order/v2/push';
 }
 }

+ 25 - 6
server/app/Http/Controllers/V1/PayNoticeController.php

@@ -3,6 +3,7 @@
 namespace App\Http\Controllers\V1;
 namespace App\Http\Controllers\V1;
 
 
 
 
+use App\Helper\ByteDance;
 use App\Helper\UniPlatform\Bytedance\Payment as BytedancePayment;
 use App\Helper\UniPlatform\Bytedance\Payment as BytedancePayment;
 use App\Helper\UniPlatform\Kuaishou\Payment as KuaishouPayment;
 use App\Helper\UniPlatform\Kuaishou\Payment as KuaishouPayment;
 use App\Models\Pay;
 use App\Models\Pay;
@@ -16,8 +17,9 @@ class PayNoticeController extends Controller
 {
 {
     public function bytedance()
     public function bytedance()
     {
     {
-        $app = new BytedancePayment($this->getUniFactory());
-        return $app->payNotify(function ($data, $fail) {
+        $factory = $this->getUniFactory();
+        $app = new BytedancePayment($factory);
+        return $app->payNotify(function ($data, $fail) use ($factory) {
             //处理支付订单
             //处理支付订单
             try {
             try {
                 \DB::beginTransaction();
                 \DB::beginTransaction();
@@ -33,11 +35,16 @@ class PayNoticeController extends Controller
                 $pay->save();
                 $pay->save();
                 // 处理
                 // 处理
                 if ($pay->source == Pay::SOURCE_RECHARGE) {
                 if ($pay->source == Pay::SOURCE_RECHARGE) {
-                    $this->recharge($payId);
+                    $goods = $this->recharge($payId);
                 } else if ($pay->source == Pay::SOURCE_BUY_VIP) {
                 } else if ($pay->source == Pay::SOURCE_BUY_VIP) {
-                    $this->buyVip($payId);
+                    $goods = $this->buyVip($payId);
                 }
                 }
 
 
+                if(isset($goods)){
+                    /* @var Pay $payInfo*/
+                    $payInfo = Pay::with(['user'])->where('id', $payId)->first($payId);
+                    $factory->pushOrder($payInfo->user->open_id, $payId, $goods);
+                }
                 \DB::commit();
                 \DB::commit();
             } catch (\Exception $e) {
             } catch (\Exception $e) {
                 \DB::rollBack();
                 \DB::rollBack();
@@ -91,7 +98,7 @@ class PayNoticeController extends Controller
     private function recharge($payId)
     private function recharge($payId)
     {
     {
         /* @var UserRechargeRecord $record */
         /* @var UserRechargeRecord $record */
-        $record = UserRechargeRecord::where('pay_id', $payId)->first();
+        $record = UserRechargeRecord::with(['combo'])->where('pay_id', $payId)->first();
         if (!$record) {
         if (!$record) {
             return true;
             return true;
         }
         }
@@ -116,12 +123,18 @@ class PayNoticeController extends Controller
         $record->status = 1;
         $record->status = 1;
         $record->save();
         $record->save();
 
 
+        return [
+            'id' => $record->combo_id,
+            'title' => $record->combo->name,
+            'price' => $record->combo->price
+        ];
+
     }
     }
 
 
     private function buyVip($payId)
     private function buyVip($payId)
     {
     {
         /* @var UserVipRecord $record */
         /* @var UserVipRecord $record */
-        $record = UserVipRecord::where('pay_id', $payId)->first();
+        $record = UserVipRecord::with(['combo'])->where('pay_id', $payId)->first();
         if (!$record) {
         if (!$record) {
             return true;
             return true;
         }
         }
@@ -139,6 +152,12 @@ class PayNoticeController extends Controller
         $record->status = 1;
         $record->status = 1;
         $record->save();
         $record->save();
 
 
+        return [
+            'id' => $record->combo_id,
+            'title' => $record->combo->name,
+            'price' => $record->combo->price
+        ];
+
     }
     }
 }
 }
 
 

+ 6 - 0
server/app/Http/Controllers/V1/User/RechargeController.php

@@ -5,6 +5,7 @@ use App\Helper\SerialNumber;
 use App\Http\Controllers\V1\Controller;
 use App\Http\Controllers\V1\Controller;
 use App\Models\Pay;
 use App\Models\Pay;
 use App\Models\RechargeCombo;
 use App\Models\RechargeCombo;
+use App\Models\Setting;
 use App\Models\UserConsumeRecord;
 use App\Models\UserConsumeRecord;
 use App\Models\UserEpisodesRecord;
 use App\Models\UserEpisodesRecord;
 use App\Models\UserRechargeRecord;
 use App\Models\UserRechargeRecord;
@@ -36,6 +37,11 @@ class RechargeController extends Controller
     public function createOrder()
     public function createOrder()
     {
     {
         try {
         try {
+            /* @var Setting $setting*/
+            $setting = Setting::first();
+            if($setting->is_review) {
+                throw new \Exception('暂不支持,请联系管理员');
+            }
             \DB::beginTransaction();
             \DB::beginTransaction();
             $comboId = \request()->input('id');
             $comboId = \request()->input('id');
             $app = $this->getUniFactory(\user()->info->platform);
             $app = $this->getUniFactory(\user()->info->platform);

+ 6 - 0
server/app/Http/Controllers/V1/User/VipController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\V1\User;
 use App\Helper\SerialNumber;
 use App\Helper\SerialNumber;
 use App\Http\Controllers\V1\Controller;
 use App\Http\Controllers\V1\Controller;
 use App\Models\Pay;
 use App\Models\Pay;
+use App\Models\Setting;
 use App\Models\UserConsumeRecord;
 use App\Models\UserConsumeRecord;
 use App\Models\UserEpisodesRecord;
 use App\Models\UserEpisodesRecord;
 use App\Models\UserRechargeRecord;
 use App\Models\UserRechargeRecord;
@@ -28,6 +29,11 @@ class VipController extends Controller
     public function createOrder()
     public function createOrder()
     {
     {
         try {
         try {
+            /* @var Setting $setting*/
+            $setting = Setting::first();
+            if($setting->is_review) {
+                throw new \Exception('暂不支持,请联系管理员');
+            }
             \DB::beginTransaction();
             \DB::beginTransaction();
             $comboId = \request()->input('id');
             $comboId = \request()->input('id');
             $app = $this->getUniFactory(\user()->info->platform);
             $app = $this->getUniFactory(\user()->info->platform);

+ 7 - 0
server/app/Models/Pay.php

@@ -7,6 +7,7 @@ use App\Helper\SerialNumber;
 use App\Helper\UniPlatform\BaseUniPlatform;
 use App\Helper\UniPlatform\BaseUniPlatform;
 use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
 
 
 /**
 /**
  * App\Models\Pay
  * App\Models\Pay
@@ -49,6 +50,7 @@ use Illuminate\Database\Eloquent\Model;
  * @method static \Illuminate\Database\Eloquent\Builder|Pay whereSource($value)
  * @method static \Illuminate\Database\Eloquent\Builder|Pay whereSource($value)
  * @property string|null $token 支付token
  * @property string|null $token 支付token
  * @method static \Illuminate\Database\Eloquent\Builder|Pay whereToken($value)
  * @method static \Illuminate\Database\Eloquent\Builder|Pay whereToken($value)
+ * @property-read \App\Models\User|null $user
  */
  */
 class Pay extends Model
 class Pay extends Model
 {
 {
@@ -66,6 +68,11 @@ class Pay extends Model
         'pay_id' => 'string'
         'pay_id' => 'string'
     ];
     ];
 
 
+    public function user(): BelongsTo
+    {
+        return $this->belongsTo(User::class,'user_id','id');
+    }
+
     /**
     /**
      * @param BaseUniPlatform $byteDance
      * @param BaseUniPlatform $byteDance
      * @param           $price
      * @param           $price

+ 1 - 0
server/app/Models/Setting.php

@@ -19,6 +19,7 @@ use Illuminate\Database\Eloquent\Model;
  * @property string $recharge_button_txt 按钮文案
  * @property string $recharge_button_txt 按钮文案
  * @property string|null $recharge_desc 充值说明
  * @property string|null $recharge_desc 充值说明
  * @property string|null $nav_seting 导航栏设置 json
  * @property string|null $nav_seting 导航栏设置 json
+ * @property int|null is_review 是否审核模式
  * @property \Illuminate\Support\Carbon|null $updated_at
  * @property \Illuminate\Support\Carbon|null $updated_at
  * @property string|null $deleted_at
  * @property string|null $deleted_at
  * @property \Illuminate\Support\Carbon|null $created_at
  * @property \Illuminate\Support\Carbon|null $created_at