|
|
@@ -0,0 +1,131 @@
|
|
|
+<?php
|
|
|
+declare (strict_types=1);
|
|
|
+namespace app\api\controller\v1;
|
|
|
+
|
|
|
+use app\Request;
|
|
|
+use app\BaseController;
|
|
|
+use app\model\api\PayTrade;
|
|
|
+use library\services\UtilService;
|
|
|
+use library\utils\weixinPay as wxpayApi;
|
|
|
+use WeChatPay\Transformer;
|
|
|
+use app\lib\OrderLib;
|
|
|
+use think\Exception;
|
|
|
+
|
|
|
+class Pay extends BaseController{
|
|
|
+ /**
|
|
|
+ * 微信支付V2异步反馈
|
|
|
+ * @param Request $request
|
|
|
+ * @return boolean
|
|
|
+ */
|
|
|
+ public function wxpayNotify(Request $request){
|
|
|
+ $xmlData = $request->getInput();
|
|
|
+ if(empty($xmlData)){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $logfile = app()->getRootPath().'public/log/wxnotify.log';
|
|
|
+ file_put_contents($logfile, $xmlData.PHP_EOL,FILE_APPEND | LOCK_EX);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+// if(empty($post["event_type"]) || $post["event_type"] != "TRANSACTION.SUCCESS"){
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+// if(empty($post["resource_type"]) || $post["resource_type"]!="encrypt-resource"){
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+// if(empty($post["resource"])){
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+// $wxpay = new wxpayApi();
|
|
|
+// $result = $wxpay->aesGcmDecrypt([
|
|
|
+// "associated_data"=>$post["resource"]["associated_data"],
|
|
|
+// "nonce"=>$post["resource"]["nonce"],
|
|
|
+// "ciphertext"=>$post["resource"]["ciphertext"],
|
|
|
+// ]);
|
|
|
+//
|
|
|
+// if(!$result){
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+// //商家内部订单号
|
|
|
+// $out_trade_no = $result["out_trade_no"];
|
|
|
+// $res = $wxpay->searchOrder($out_trade_no);
|
|
|
+// if(!$res){
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+// $data = json_decode($res,true);
|
|
|
+// //支付成功
|
|
|
+// if($data["trade_state"]=="SUCCESS"){
|
|
|
+// $payDataInfo = [
|
|
|
+// 'totalMoney' =>(empty($data["amount"]) || empty($data["amount"]["total"])) ?"未返回":$data["amount"]["total"]/100,
|
|
|
+// 'payMoney' =>(empty($data["amount"]) || empty($data["amount"]["payer_total"]))?"未返回":$data["amount"]["payer_total"]/100,
|
|
|
+// 'payTradeNo' =>empty($data["transaction_id"]) ? "未返回" : $data["transaction_id"],
|
|
|
+// 'outTradeNo' =>empty($data["out_trade_no"]) ? "未返回" : $data["out_trade_no"],
|
|
|
+// "tradeStatus"=>empty($data["trade_state"]) ? "未返回" : $data["trade_state"],
|
|
|
+// "payTime" =>empty($data["success_time"]) ? "未返回" : $data["success_time"],
|
|
|
+// ];
|
|
|
+// $pay_json = json_encode($payDataInfo);
|
|
|
+// (new OrderLib)->orderPay($out_trade_no, $pay_json);
|
|
|
+// }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 微信支付V3异步反馈
|
|
|
+ * @param Request $request
|
|
|
+ * @return boolean
|
|
|
+ */
|
|
|
+ public function wxpayNotifyV3(Request $request){
|
|
|
+ $post = UtilService::getMore([
|
|
|
+ ['id', ''],
|
|
|
+ ['create_time', ''],
|
|
|
+ ['event_type',''],
|
|
|
+ ['resource_type', ''],
|
|
|
+ ['resource',[]],
|
|
|
+ ['summary', ''],
|
|
|
+ ], $request);
|
|
|
+ if(empty($post["event_type"]) || $post["event_type"] != "TRANSACTION.SUCCESS"){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(empty($post["resource_type"]) || $post["resource_type"]!="encrypt-resource"){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(empty($post["resource"])){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $wxpay = new wxpayApi();
|
|
|
+ $result = $wxpay->aesGcmDecrypt([
|
|
|
+ "associated_data"=>$post["resource"]["associated_data"],
|
|
|
+ "nonce"=>$post["resource"]["nonce"],
|
|
|
+ "ciphertext"=>$post["resource"]["ciphertext"],
|
|
|
+ ]);
|
|
|
+
|
|
|
+ if(!$result){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ //商家内部订单号
|
|
|
+ $out_trade_no = $result["out_trade_no"];
|
|
|
+ $res = $wxpay->searchOrder($out_trade_no);
|
|
|
+ if(!$res){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $data = json_decode($res,true);
|
|
|
+ //支付成功
|
|
|
+ if($data["trade_state"]=="SUCCESS"){
|
|
|
+ $payDataInfo = [
|
|
|
+ 'totalMoney' =>(empty($data["amount"]) || empty($data["amount"]["total"])) ?"未返回":$data["amount"]["total"]/100,
|
|
|
+ 'payMoney' =>(empty($data["amount"]) || empty($data["amount"]["payer_total"]))?"未返回":$data["amount"]["payer_total"]/100,
|
|
|
+ 'payTradeNo' =>empty($data["transaction_id"]) ? "未返回" : $data["transaction_id"],
|
|
|
+ 'outTradeNo' =>empty($data["out_trade_no"]) ? "未返回" : $data["out_trade_no"],
|
|
|
+ "tradeStatus"=>empty($data["trade_state"]) ? "未返回" : $data["trade_state"],
|
|
|
+ "payTime" =>empty($data["success_time"]) ? "未返回" : $data["success_time"],
|
|
|
+ ];
|
|
|
+ $pay_json = json_encode($payDataInfo);
|
|
|
+ (new OrderLib)->orderPay($out_trade_no, $pay_json);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|