xieruidong il y a 2 ans
Parent
commit
34bcec04b2

+ 31 - 19
application/common/library/upacp_demo_b2c/demo/api_01_gateway/Form_6_5_Query.php

@@ -21,25 +21,37 @@ header ( 'Content-type:text/html;charset=utf-8' );
  *        2)对后台交易发起交易状态查询:后台类资金类交易同步返回00,成功银联有后台通知,商户也可以发起 查询交易,可查询N次(不超过6次),每次时间间隔2N秒发起,即间隔1,2,4,8,16,32S查询(查询到03,04,05继续查询,否则终止查询)。
  *        					         后台类资金类同步返03 04 05响应码及未得到银联响应(读超时)需发起查询交易,可查询N次(不超过6次),每次时间间隔2N秒发起,即间隔1,2,4,8,16,32S查询(查询到03,04,05继续查询,否则终止查询)。
  */
+/*
+class UnionQuery{
+    public static function query($orderId,$txnTime){
+        $params = array(
+            //以下信息非特殊情况不需要改动
+            'version' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->version,		  //版本号
+            'encoding' => 'utf-8',		  //编码方式
+            'signMethod' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->signMethod,		  //签名方法
+            'txnType' => '00',		      //交易类型
+            'txnSubType' => '00',		  //交易子类
+            'bizType' => '000000',		  //业务类型
+            'accessType' => '0',		  //接入类型
+            'channelType' => '07',		  //渠道类型
 
-$params = array(
-		//以下信息非特殊情况不需要改动
-		'version' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->version,		  //版本号
-		'encoding' => 'utf-8',		  //编码方式
-		'signMethod' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->signMethod,		  //签名方法
-		'txnType' => '00',		      //交易类型
-		'txnSubType' => '00',		  //交易子类
-		'bizType' => '000000',		  //业务类型
-		'accessType' => '0',		  //接入类型
-		'channelType' => '07',		  //渠道类型
+            //TODO 以下信息需要填写
+            'orderId' => $orderId,	//请修改被查询的交易的订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数
+            'merId' => file_get_contents(__DIR__.'/../../assets/roots/mid.txt'),	    //商户代码,请改自己的测试商户号,此处默认取demo演示页面传递的参数
+            'txnTime' => date('YmdHis',$txnTime),	//请修改被查询的交易的订单发送时间,格式为YYYYMMDDhhmmss,此处默认取demo演示页面传递的参数
+        );
 
-		//TODO 以下信息需要填写
-		'orderId' => $_POST["orderId"],	//请修改被查询的交易的订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数
-		'merId' => '777290058200548',	    //商户代码,请改自己的测试商户号,此处默认取demo演示页面传递的参数
-		'txnTime' => $_POST["txnTime"],	//请修改被查询的交易的订单发送时间,格式为YYYYMMDDhhmmss,此处默认取demo演示页面传递的参数
-);
+        com\unionpay\acp\sdk\AcpService::sign ( $params ); // 签名
+        $url = com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->singleQueryUrl;
 
-com\unionpay\acp\sdk\AcpService::sign ( $params ); // 签名
+        $result_arr = com\unionpay\acp\sdk\AcpService::post ( $params, $url);
+        return is_array($result_arr) && $result_arr["origRespCode"] == "00";
+    }
+}*/
+
+
+
+/*com\unionpay\acp\sdk\AcpService::sign ( $params ); // 签名
 $url = com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->singleQueryUrl;
 
 $result_arr = com\unionpay\acp\sdk\AcpService::post ( $params, $url);
@@ -82,7 +94,7 @@ if ($result_arr["respCode"] == "00"){
 	//其他应答码做以失败处理
 	//TODO
 	echo "失败:" . $result_arr["respMsg"] . "。<br>\n";
-}
+}*/
 
 /**
  * 打印请求应答
@@ -94,12 +106,12 @@ if ($result_arr["respCode"] == "00"){
  * @param
  *        	$resp
  */
-function printResult($url, $req, $resp) {
+/*function printResult($url, $req, $resp) {
 	echo "=============<br>\n";
 	echo "地址:" . $url . "<br>\n";
 	echo "请求:" . str_replace ( "\n", "\n<br>", htmlentities ( com\unionpay\acp\sdk\createLinkString ( $req, false, true ) ) ) . "<br>\n";
 	echo "应答:" . str_replace ( "\n", "\n<br>", htmlentities ( com\unionpay\acp\sdk\createLinkString ( $resp , false, false )) ) . "<br>\n";
 	echo "=============<br>\n";
-}
+}*/
 
 

+ 1 - 1
application/common/library/upacp_demo_b2c/sdk/SDKConfig.php

@@ -1,5 +1,5 @@
 <?php
-namespace com\unionpay\acp\sdk;;
+namespace com\unionpay\acp\sdk;
 include_once 'log.class.php';
 include_once 'common.php';
 

+ 29 - 2
application/common/library/upacp_demo_b2c/sdk/acp_service.php

@@ -265,8 +265,8 @@ class AcpService {
 	/**
 	 * 后台交易 HttpClient通信
 	 *
-	 * @param unknown_type $params
-	 * @param unknown_type $url
+	 * @param  $params
+	 * @param  $url
 	 * @return mixed
 	 */
 	static function post($params, $url) {
@@ -536,3 +536,30 @@ eot;
 	}
 }
 
+
+class UnionQuery{
+    public static function query($orderId,$txnTime){
+        $params = array(
+            //以下信息非特殊情况不需要改动
+            'version' => SDKConfig::getSDKConfig()->version,		  //版本号
+            'encoding' => 'utf-8',		  //编码方式
+            'signMethod' => SDKConfig::getSDKConfig()->signMethod,		  //签名方法
+            'txnType' => '00',		      //交易类型
+            'txnSubType' => '00',		  //交易子类
+            'bizType' => '000000',		  //业务类型
+            'accessType' => '0',		  //接入类型
+            'channelType' => '07',		  //渠道类型
+
+            //TODO 以下信息需要填写
+            'orderId' => $orderId,	//请修改被查询的交易的订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数
+            'merId' => file_get_contents(__DIR__.'/../../assets/roots/mid.txt'),	    //商户代码,请改自己的测试商户号,此处默认取demo演示页面传递的参数
+            'txnTime' => date('YmdHis',$txnTime),	//请修改被查询的交易的订单发送时间,格式为YYYYMMDDhhmmss,此处默认取demo演示页面传递的参数
+        );
+
+        AcpService::sign ( $params ); // 签名
+        $url = SDKConfig::getSDKConfig()->singleQueryUrl;
+
+        $result_arr = AcpService::post ( $params, $url);
+        return is_array($result_arr) && $result_arr["origRespCode"] == "00";
+    }
+}

+ 12 - 1
application/common/service/PayReturnService.php

@@ -3,6 +3,8 @@ namespace app\common\service;
 
 use addons\epay\library\Service;
 use app\common\model\Payment;
+use com\unionpay\acp\sdk\AcpService;
+use com\unionpay\acp\sdk\UnionQuery;
 use fast\Arr;
 use think\App;
 
@@ -37,7 +39,16 @@ class PayReturnService{
            'success'
        ];
    }
-   public function bankUnion(){}
+   public function bankUnion(){
+        require __DIR__.'/../library/upacp_demo_b2c/sdk/acp_service.php';
+        $postData=request()->post();
+        $isPay=AcpService::validate($postData);
+        $queryPay=UnionQuery::query($postData['orderId'],$this->payment->create_time);
+        return [
+            $isPay && $queryPay,
+            'success'
+        ];
+   }
    public function otherUser(){}
    public function offline(){}
    public function process(){

+ 2 - 0
application/index/controller/Payment.php

@@ -27,9 +27,11 @@ class Payment extends Frontend
             Db::rollback();
             $this->result([],400);
         }
+        user_log("payment/{$payment['order_no']}",$this->request->input());
         $service=new PayReturnService();
         $service->setPayment($payment);
         list($isPay,$succ)=$service->process();
+        user_log("payment/{$payment['order_no']}",compact('isPay','succ'));
         if(!$payment['pay_time'] && $isPay){
             $payment->payed();
         }