|
|
@@ -0,0 +1,126 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace app\controller\notify;
|
|
|
+
|
|
|
+use app\extra\basic\Base;
|
|
|
+use app\extra\dyLife\data\OrderData;
|
|
|
+use app\model\saas\SaasOrder;
|
|
|
+use app\model\saas\SaasOrderItem;
|
|
|
+use app\model\saas\SaasOrderVerify;
|
|
|
+use LinFly\Annotation\Attributes\Route\Controller;
|
|
|
+use LinFly\Annotation\Attributes\Route\GetMapping;
|
|
|
+use support\Request;
|
|
|
+use support\Response;
|
|
|
+
|
|
|
+
|
|
|
+#[Controller("/test")]
|
|
|
+class Test extends Base
|
|
|
+{
|
|
|
+
|
|
|
+
|
|
|
+ #[GetMapping("verify")]
|
|
|
+ public function setVerify(Request $request): Response
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ $param = $this->_valid([
|
|
|
+ 'order.require' => trans("empty.require")
|
|
|
+ ]);
|
|
|
+ if (!is_array($param)) return error($param);
|
|
|
+ $order = (new SaasOrder)->where("order_sn",$param["order"])->with(['poi'])->findOrEmpty();
|
|
|
+ echo "订单状态==={$order['status']}\n";
|
|
|
+ if ($order['status'] <> 2)
|
|
|
+ {
|
|
|
+ echo getDateFull()."===订单状态不符合核销\n";
|
|
|
+ return error("订单状态不符合核销",$order->toArray());
|
|
|
+ }
|
|
|
+ // 获取到订单encrypted_code
|
|
|
+ $orderCode = (new OrderData)->config([
|
|
|
+ "appid" => sConf("wechat.appid"),
|
|
|
+ "secret" => sConf("wechat.secret"),
|
|
|
+ "account" => sConf("wechat.shop_id"),
|
|
|
+ ])->token()->getCertificate($order['order_sn'],$order['poi']['store_id']);
|
|
|
+ if (empty($orderCode['certificates']))
|
|
|
+ {
|
|
|
+ echo getDateFull()."===获取订单数据失败\n";
|
|
|
+ return error("获取订单数据失败",$orderCode);
|
|
|
+ }
|
|
|
+ echo getDateFull()."===核销数据\n";
|
|
|
+ print_r($orderCode['certificates']);
|
|
|
+ $encrypted_code = [];
|
|
|
+ foreach ($orderCode['certificates'] as $key=>$v)
|
|
|
+ {
|
|
|
+ if (empty($v['encrypted_code']))
|
|
|
+ {
|
|
|
+ echo getDateFull()."===获取订单数据失败\n";
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if ($v['status'] <> 1) {
|
|
|
+ echo getDateFull()."===该订单状态不支持核销\n";
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $encrypted_code[$key] = $v['encrypted_code'];
|
|
|
+ }
|
|
|
+ echo getDateFull()."===券码数据\n";
|
|
|
+ print_r($encrypted_code);
|
|
|
+ if (empty($encrypted_code))
|
|
|
+ {
|
|
|
+ echo getDateFull()."===没有可核销券码\n";
|
|
|
+ $order->express_status = 3;
|
|
|
+ $order->done_at = getDateFull();
|
|
|
+ $order->save();
|
|
|
+ return error("没有可核销券码",$encrypted_code);
|
|
|
+ }
|
|
|
+ // 核销订单
|
|
|
+ $orderDone = (new OrderData)->config([
|
|
|
+ "appid" => sConf("wechat.appid"),
|
|
|
+ "secret" => sConf("wechat.secret"),
|
|
|
+ "account" => sConf("wechat.shop_id"),
|
|
|
+ ])->token()->verifyCertificate([
|
|
|
+ "account_id" => $order['poi']['store_id'],
|
|
|
+ "pay_sn" => $order['pay_sn'],
|
|
|
+// "encrypted_code" => $orderCode['certificates'][0]['encrypted_code'],
|
|
|
+ "encrypted_code" => array_values($encrypted_code),
|
|
|
+ "order_id" => $order['order_sn'],
|
|
|
+ "poi_id" => $order['poi_id']
|
|
|
+ ]);
|
|
|
+ echo getDateFull()."===核销返回\n";
|
|
|
+ print_r($orderDone);
|
|
|
+ if (empty($orderDone['verify_results']))
|
|
|
+ {
|
|
|
+ echo getDateFull()."===核销失败\n";
|
|
|
+ return error("核销失败",$orderDone);
|
|
|
+ }
|
|
|
+ $doneData = [];
|
|
|
+ foreach ($orderDone['verify_results'] as $key=>$v)
|
|
|
+ {
|
|
|
+ if(empty($v['verify_id'])) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if(empty($v['certificate_id'])) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $doneData[$key] = [
|
|
|
+ "poi_id" => $order['poi_id'],
|
|
|
+ "order_sn" => $order['order_sn'],
|
|
|
+ "money" => $order['price'],
|
|
|
+ "certificate_id" => $v['certificate_id'],
|
|
|
+ "verify_id" => $v['verify_id'],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ if (empty($doneData))
|
|
|
+ {
|
|
|
+ echo getDateFull()."===核销完成无数据返回\n";
|
|
|
+ return error("核销完成无数据返回",$doneData);
|
|
|
+ }
|
|
|
+ $order->express_status = 3;
|
|
|
+ $order->done_at = getDateFull();
|
|
|
+ $order->save();
|
|
|
+ (new SaasOrderItem)->where(['order_sn'=>$order['order_sn'],'status'=>1])->update(['status'=>3]);
|
|
|
+ (new SaasOrderVerify)->insertAll(array_values($doneData));
|
|
|
+ return success("核销成功");
|
|
|
+ } catch (\Throwable $throwable) {
|
|
|
+ return error($throwable->getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|