瀏覽代碼

app支付

Kirin 3 年之前
父節點
當前提交
37ef0bdd46

+ 6 - 2
app/api/controller/order/StoreOrderController.php

@@ -223,6 +223,8 @@ class StoreOrderController
                                 $jsConfig = OrderRepository::jsPay($orderId); //创建订单jspay
                             } else if ($from == 'weixinh5') {
                                 $jsConfig = OrderRepository::h5Pay($orderId);
+                            } else if ($from == 'app') {
+                                $jsConfig = OrderRepository::appPay($orderId);
                             } else {
                                 $jsConfig = OrderRepository::wxPay($orderId);
                             }
@@ -353,6 +355,8 @@ class StoreOrderController
                         $jsConfig = OrderRepository::jsPay($order); //订单列表发起支付
                     } else if ($from == 'weixinh5') {
                         $jsConfig = OrderRepository::h5Pay($order);
+                    } else if ($from == 'app') {
+                        $jsConfig = OrderRepository::appPay($order);
                     } else {
                         $jsConfig = OrderRepository::wxPay($order);
                     }
@@ -531,11 +535,11 @@ class StoreOrderController
             }
             if (is_array($result) && (isset($result['result']) || isset($result['content']))) {
                 $cacheTime = 1200;
-                if(isset($result['content'])){
+                if (isset($result['content'])) {
                     $result['result'] = $result['content'];
                     unset($result['content']);
                 }
-            }else
+            } else
                 $cacheTime = 1800;
             CacheService::set($cacheName, $result, $cacheTime);
         }

+ 43 - 0
app/api/controller/user/UserRechargeController.php

@@ -117,6 +117,49 @@ class UserRechargeController
         }
     }
 
+    /**
+     * 支付宝充值
+     *
+     * @param Request $request
+     * @return mixed
+     */
+    public function app(Request $request)
+    {
+        list($price, $recharId, $type, $get_money_type) = UtilService::postMore([['price', 0], ['rechar_id', 0], ['type', 0], ['get_money_type', 'now_money']], $request, true);
+        if (!$price || $price <= 0) return app('json')->fail('参数错误');
+        $storeMinRecharge = sys_config('store_user_min_recharge');
+        if ($price < $storeMinRecharge) return app('json')->fail('充值金额不能低于' . $storeMinRecharge);
+        switch ((int)$type) {
+            case 0: //支付充值余额
+                $paid_price = 0;
+                if ($recharId) {
+                    $data = SystemGroupData::getDateValue($recharId);
+                    if ($data === false) {
+                        return app('json')->fail('您选择的充值方式已下架!');
+                    } else {
+                        $paid_price = $data['give_money'] ?? 0;
+                    }
+                }
+                $rechargeOrder = UserRecharge::addRecharge($request->uid(), $price, 'app', $paid_price);
+                if (!$rechargeOrder) return app('json')->fail('充值订单生成失败!');
+                try {
+                    return app('json')->successful(UserRecharge::appPay($rechargeOrder));
+                } catch (\Exception $e) {
+                    return app('json')->fail($e->getMessage());
+                }
+                break;
+            case 1: //佣金转入余额
+                if (UserRecharge::importNowMoney($request->uid(), $price))
+                    return app('json')->successful('转入余额成功');
+                else
+                    return app('json')->fail(UserRecharge::getErrorInfo());
+                break;
+            default:
+                return app('json')->fail('缺少参数');
+                break;
+        }
+    }
+
     /**
      * 充值额度选择
      * @return mixed

+ 31 - 0
app/models/user/UserRecharge.php

@@ -9,6 +9,7 @@ namespace app\models\user;
 
 use crmeb\basic\BaseModel;
 use crmeb\services\MiniProgramService;
+use crmeb\services\SystemConfigService;
 use crmeb\services\WechatService;
 use crmeb\traits\ModelTrait;
 
@@ -100,6 +101,36 @@ class UserRecharge extends BaseModel
         return WechatService::jsPay(WechatUser::uidToOpenid($orderInfo['uid'], 'openid'), $orderInfo['order_id'], $orderInfo['price'], 'user_recharge', '用户充值');
     }
 
+    public static function appPay($orderInfo)
+    {
+        if (!$orderInfo || !isset($orderInfo['paid'])) exception('支付订单不存在!');
+        if ($orderInfo['paid']) exception('支付已支付!');
+        if ($orderInfo['price'] <= 0) exception('该支付无需支付!');
+        $site_name = sys_config('site_name');
+        $wechat = SystemConfigService::more(['weixin_open_appid', 'weixin_open_appsecret']);
+        $payment = SystemConfigService::more(['pay_weixin_mchid', 'pay_weixin_client_cert', 'pay_weixin_client_key', 'pay_weixin_key', 'pay_weixin_open']);
+        if (!$site_name) exception('支付参数缺少:请前往后台设置->系统设置-> 填写 网站名称');
+        $config = array(
+            'appid' => $wechat['weixin_open_appid'],         //填写高级调用功能的app id
+            'appsecret' => $wechat['weixin_open_appsecret'],      //填写高级调用功能的app secret
+            'mchid' => $payment['pay_weixin_mchid'],         //商户id
+            'key' => $payment['pay_weixin_key'],         //填写你设定的key
+            'sslcert_path' => $payment['pay_weixin_client_cert'],
+            'sslkey_path' => $payment['pay_weixin_client_key'],
+            'transfer_rsa_public_path' => '',  //企业转账到银行卡rsa公钥证书文件路径
+        );
+        $wechatpay = new \JiaLeo\Payment\Wechatpay\AppPay($config);
+        $pay_data = [
+            'body' => '用户充值 - ' . $site_name, //内容
+            'attach' => 'user_recharge', //商家数据包
+            'out_trade_no' => $orderInfo['order_id'], //商户订单号
+            'total_fee' => bcmul($orderInfo['price'], 100, 0), //支付价格(单位:分)
+            'notify_url' => sys_config('site_url') . '/api/wechat/notify', //后台回调地址
+        ];
+        $url = $wechatpay->handle($pay_data);
+        return $url;
+    }
+
     /**
      * //TODO用户充值成功后
      * @param $orderId

+ 43 - 0
crmeb/repositories/OrderRepository.php

@@ -8,6 +8,7 @@ use app\models\user\UserBill;
 use app\models\user\WechatUser;
 use app\admin\model\order\StoreOrder as AdminStoreOrder;
 use crmeb\services\MiniProgramService;
+use crmeb\services\SystemConfigService;
 use crmeb\services\WechatService;
 
 /**
@@ -91,6 +92,48 @@ class OrderRepository
         return WechatService::paymentPrepare(null, $orderInfo['order_id'], $orderInfo['pay_price'], 'product', StoreOrder::getSubstrUTf8($site_name . ' - ' . $bodyContent, 30), '', 'MWEB');
     }
 
+    /**
+     * 微信app支付
+     * @param $order
+     * @param string $field
+     * @return array|string
+     * @throws Exception
+     */
+    public static function appPay($order, string $field = 'order_id')
+    {
+        if (is_string($order))
+            $orderInfo = StoreOrder::where($field, $order)->find();
+        else
+            $orderInfo = $order;
+        if (!$orderInfo || !isset($orderInfo['paid'])) exception('支付订单不存在!');
+        if ($orderInfo['paid']) exception('支付已支付!');
+        if ($orderInfo['pay_price'] <= 0) exception('该支付无需支付!');
+        $bodyContent = StoreOrder::getProductTitle($orderInfo['cart_id']);
+        $site_name = sys_config('site_name');
+        $wechat = SystemConfigService::more(['weixin_open_appid', 'weixin_open_appsecret'], true);
+        $payment = SystemConfigService::more(['pay_weixin_mchid', 'pay_weixin_client_cert', 'pay_weixin_client_key', 'pay_weixin_key', 'pay_weixin_open'], true);
+        if (!$bodyContent && !$site_name) exception('支付参数缺少:请前往后台设置->系统设置-> 填写 网站名称');
+        $config = array(
+            'appid' => $wechat['weixin_open_appid'],         //填写高级调用功能的app id
+            'appsecret' => $wechat['weixin_open_appsecret'],      //填写高级调用功能的app secret
+            'mchid' => $payment['pay_weixin_mchid'],         //商户id
+            'key' => $payment['pay_weixin_key'],         //填写你设定的key
+            'sslcert_path' => realpath('.' . $payment['pay_weixin_client_cert']),
+            'sslkey_path' => realpath('.' . $payment['pay_weixin_client_key']),
+            'transfer_rsa_public_path' => '',  //企业转账到银行卡rsa公钥证书文件路径
+        );
+        $wechatpay = new \JiaLeo\Payment\Wechatpay\AppPay($config);
+        $pay_data = [
+            'body' => StoreOrder::getSubstrUTf8($site_name . ' - ' . $bodyContent, 30), //内容
+            'attach' => 'product', //商家数据包
+            'out_trade_no' => $orderInfo['order_id'], //商户订单号
+            'total_fee' => bcmul($orderInfo['pay_price'], 100, 0), //支付价格(单位:分)
+            'notify_url' => sys_config('site_url') . '/api/wechat/notify', //后台回调地址
+        ];
+        $url = $wechatpay->handle($pay_data);
+        return $url;
+    }
+
     /**
      * 用户确认收货
      * @param $order

+ 1 - 0
route/api/route.php

@@ -163,6 +163,7 @@ Route::group(function () {
     Route::post('recharge/routine', 'user.UserRechargeController/routine')->name('rechargeRoutine');//小程序充值
     Route::post('recharge/wechat', 'user.UserRechargeController/wechat')->name('rechargeWechat');//公众号充值
     Route::get('recharge/index','user.UserRechargeController/index')->name('rechargeQuota');//充值余额选择
+    Route::get('recharge/app','user.UserRechargeController/app')->name('rechargeQuota');//充值余额选择
     //会员等级类
     Route::get('menu/user', 'PublicController/menu_user')->name('menuUser');//个人中心菜单
     Route::get('user/level/detection', 'user.UserLevelController/detection')->name('userLevelDetection');//检测用户是否可以成为会员