From 47f0ba11192323c95fea46773654a114af9f9dca Mon Sep 17 00:00:00 2001 From: qinzexin <“731344816@qq.com”> Date: Sat, 9 Aug 2025 18:32:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=89=E5=8D=A1=E6=8B=89=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/controller/Demo.php | 35 +++-- .../common/model/school/activity/Activity.php | 9 ++ .../model/school/activity/order/Order.php | 122 ++++++++++++++++++ .../school/activity/order/OrderDetail.php | 7 + extend/bw/lakala/LakalaService.php | 4 + 5 files changed, 163 insertions(+), 14 deletions(-) diff --git a/application/api/controller/Demo.php b/application/api/controller/Demo.php index cd5992f..e718e8f 100644 --- a/application/api/controller/Demo.php +++ b/application/api/controller/Demo.php @@ -56,8 +56,8 @@ class Demo extends Api // 主扫交易参数 $request = new \Lakala\OpenAPISDK\V3\Model\TransPreorderRequest(); // 必填参数 - $request->setMerchantNo('822290059430BFA'); - $request->setTermNo('D9261078'); + $request->setMerchantNo('82249307372005M'); + $request->setTermNo('L4678871'); $request->setOutTradeNo(date('YmdHis', time())); $request->setAccountType('WECHAT'); $request->setTransType('71'); @@ -109,20 +109,27 @@ class Demo extends Api try { $response = $api->transPreorder($request); - if ($response->getRespData()) { - print_r($response->getRespData()); - print_r($response->getAccRespFields()); - } - else { - print_r($response); - } - echo $response->getCode(); +// if ($response->getRespData()) { +// print_r($response->getRespData()); +// print_r($response->getAccRespFields()); +// } +// else { +// print_r($response); +// } + $bbs_code = $response->getCode(); + $responsedata = json_decode($response->getOriginalText(),true); + if($bbs_code != "BBS00000"){ + + var_dump($responsedata["msg"],$responsedata["code"]); + }else{ + # 响应原文 + echo $response->getOriginalText(); + } +// +// # 响应头信息 +// print_r($response->getHeaders()); - # 响应头信息 - print_r($response->getHeaders()); - # 响应原文 - echo $response->getOriginalText(); } catch (\Lakala\OpenAPISDK\V3\ApiException $e) { echo $e->getMessage(); } diff --git a/application/common/model/school/activity/Activity.php b/application/common/model/school/activity/Activity.php index 973175a..7e3e691 100644 --- a/application/common/model/school/activity/Activity.php +++ b/application/common/model/school/activity/Activity.php @@ -325,6 +325,15 @@ class Activity extends BaseModel + + public function lakala() + { + return $this->belongsTo(LakalaBusiness::class, 'user_id', 'user_id', [], 'LEFT')->setEagerlyType(0); + } + + + + /** 更新或新增后判断 * @param $classes_activity_id * @return void diff --git a/application/common/model/school/activity/order/Order.php b/application/common/model/school/activity/order/Order.php index 024386e..daeb3ba 100644 --- a/application/common/model/school/activity/order/Order.php +++ b/application/common/model/school/activity/order/Order.php @@ -3,6 +3,7 @@ namespace app\common\model\school\activity\order; use addons\epay\library\Service; +use addons\third\model\Third; use app\admin\model\Admin; use app\admin\model\Manystore; use app\common\model\BaseModel; @@ -2734,6 +2735,127 @@ class Order extends BaseModel } + /** 得到拉卡拉订单支付参数 + * @param $order_no + * @return void + */ + public static function getLakalaOrderPayParams($order_no,$platform ="wechat",$open_id = null){ + $order = self::getOrder($order_no); + $detail = $order->detail; + if(!$detail)throw new \Exception("找不到活动!"); + $lakalaBusiness = LakalaBusiness::where("user_id",$detail["user_id"]); + $lakala = $lakalaBusiness->where("status",config("site.lakala_test_switch")? '2':'1' )->find(); + if(!$lakala)throw new \Exception("商户未开通拉卡拉钱包不具备收款能力!"); + + //金额需大于0 + if($order["totalprice"] <= 0)throw new \Exception("金额需大于0!"); + // 单位分 + $totalAmount = (int)bcmul(100,$order["totalprice"] ,0); + + //lakala + //拼装支付参数 + $lakala = lakala_sdk(); + $tradeLocationInfo = new \Lakala\OpenAPISDK\V3\Model\TradeLocationInfo($lakala->getClientIp()); + // 主扫交易Api + $api = $lakala->v3(\Lakala\OpenAPISDK\V3\Api\TransPreorderApi::class); + // 主扫交易参数 + $request = new \Lakala\OpenAPISDK\V3\Model\TransPreorderRequest(); + + + + // 必填参数 + $request->setMerchantNo($lakala["merchant_no"]); + $request->setTermNo($lakala["online_scanning_terminal_no"]); + $request->setOutTradeNo($order["order_no"]); + $request->setAccountType('WECHAT'); + $request->setTransType('71'); + $request->setTotalAmount($totalAmount); // 单位分 + $request->setLocationInfo($tradeLocationInfo); + $request->setSubject('多样青春搭+活动:'.$detail["title"].'报名支付'); + $type = "lakala"; + $method = "miniapp"; +// 非必填参数 +// $request->setBusiMode(''); +// $request->setPayOrderNo(''); + $notifyurl = request()->root(true) . '/api/school.newactivity.pay/notifyx/paytype/' . $type. '/platform/' . $method; + + $request->setNotifyUrl($notifyurl); +// $request->setSettleType(''); +// $request->setRemark(''); +// $request->setPromoInfo(''); +// $request->setOutOrderNo(''); +// $request->setPnrInsIdCd(''); + + // 没有 openid 默认拿下单人的 openid + $oauth = Third::where([ + 'user_id' => $order->user_id, + 'platform' => $platform, + 'apptype' => $method + ])->find(); + + if(!$open_id)$openid = $oauth ? $oauth->openid : ''; + if (!$openid) { + // 缺少 openid + throw new \Exception("请您重新授权登录再下单"); + } + +// 微信主扫场景 - 账户端业务信息 + $acc_busi_fields = $lakala->getTradePreorderWechaAccBusiFields($openid); + +// $acc_busi_fields->setTimeoutExpress(''); +// $acc_busi_fields->setSubAppid('wxd7e2deffbaa22254'); +// $acc_busi_fields->setUserId('ohjUL7XWERU9rDfeNdvbxxil8jZY'); +// $acc_busi_fields->setDetail(''); +// $acc_busi_fields->setGoodsTag(''); +// $acc_busi_fields->setAttach(''); +// $acc_busi_fields->setDeviceInfo(''); +// $acc_busi_fields->setLimitPay(''); +// $acc_busi_fields->setSceneInfo(''); +// $acc_busi_fields->setLimitPayer(''); + +// $detail = new \Lakala\OpenAPISDK\V3\Model\TradePreorderWechaDetail; +// $detail->setCostPrice('1.00'); +// $detail->setReceiptId(''); + +// $goods_detail = new \Lakala\OpenAPISDK\V3\Model\TradePreorderWechaGoodsDetail; +// $goods_detail->setGoodsId('3452234'); +//// $goods_detail->setWxpayGoodsId(''); +//// $goods_detail->setGoodsName('测试商品1'); +// $goods_detail->setQuantity(1.0); +// $goods_detail->setPrice(1.0); + +// $detail->setGoodsDetail([$goods_detail]); +// +// $acc_busi_fields->setDetail($detail); +// +//// 账户端业务信息 + $request->setAccBusiFields($acc_busi_fields); + +// try { + $response = $api->transPreorder($request); + if ($response->getRespData()) { + print_r($response->getRespData()); + print_r($response->getAccRespFields()); + } + else { + print_r($response); + } + echo $response->getCode(); + + # 响应头信息 + print_r($response->getHeaders()); + + # 响应原文 + echo $response->getOriginalText(); +// } catch (\Lakala\OpenAPISDK\V3\ApiException $e) { +// echo $e->getMessage(); +// } + + return $response->getOriginalText(); + + } + + diff --git a/application/common/model/school/activity/order/OrderDetail.php b/application/common/model/school/activity/order/OrderDetail.php index 73e7805..5a5c4f4 100644 --- a/application/common/model/school/activity/order/OrderDetail.php +++ b/application/common/model/school/activity/order/OrderDetail.php @@ -3,6 +3,7 @@ namespace app\common\model\school\activity\order; use app\common\model\BaseModel; +use app\common\model\manystore\LakalaBusiness; use app\common\model\school\activity\Activity; use think\Model; use traits\model\SoftDelete; @@ -206,6 +207,12 @@ class OrderDetail extends BaseModel } + public function lakala() + { + return $this->belongsTo(LakalaBusiness::class, 'user_id', 'user_id', [], 'LEFT')->setEagerlyType(0); + } + + public function order() { return $this->belongsTo(Order::class, 'activity_order_id', 'id', [], 'LEFT')->setEagerlyType(0); diff --git a/extend/bw/lakala/LakalaService.php b/extend/bw/lakala/LakalaService.php index b19f97c..ffcd60f 100644 --- a/extend/bw/lakala/LakalaService.php +++ b/extend/bw/lakala/LakalaService.php @@ -4,6 +4,10 @@ namespace bw\lakala; /** * 拉卡拉服务工厂 + * @package bw\lakala + * @author 焦钰锟 + * @date 2025/08/06 + * */ class LakalaService {