You've already forked qlg.tsgz.moe
							
							
		
			
				
	
	
		
			248 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			248 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php
 | |
| namespace wstmart\mobile\controller;
 | |
| use think\Loader;
 | |
| use wstmart\common\model\Payments as M;
 | |
| use wstmart\mobile\model\Orders as OM;
 | |
| use wstmart\common\model\LogPayParams as PM;
 | |
| use wstmart\common\model\ChargeItems as CM;
 | |
| use wstmart\common\model\LogMoneys as LM;
 | |
| /**
 | |
|  * ============================================================================
 | |
|  * 阿里支付控制器
 | |
|  */
 | |
| class Alipays extends Base{
 | |
| 
 | |
| 	/**
 | |
| 	 * 初始化
 | |
| 	 */
 | |
| 	private $alipayConfig;
 | |
| 	public function _initialize() {
 | |
| 		header ("Content-type: text/html; charset=utf-8");
 | |
| 		Loader::import ( 'alipay.Corefunction' );
 | |
|     	Loader::import ( 'alipay.Md5function' );
 | |
|     	Loader::import ( 'alipay.AlipayNotify' );
 | |
|     	Loader::import ( 'alipay.AlipaySubmit' );
 | |
|     	$m = new M();
 | |
|     	$payment = $m->getPayment("alipays");
 | |
|     	$this->alipayConfig = array(
 | |
|     			'partner' =>$payment['parterID'],   //这里是你在成功申请支付宝接口后获取到的PID;
 | |
|     			'key'=>$payment['parterKey'],//这里是你在成功申请支付宝接口后获取到的Key
 | |
|     			'seller_email'=>$payment['payAccount'],
 | |
|     			'sign_type'=>strtoupper('MD5'),
 | |
|     			'input_charset'=> strtolower('utf-8'),
 | |
|     			'cacert'=>'',
 | |
|     			'transport'=> 'http'
 | |
|     	);
 | |
| 	}
 | |
| 	
 | |
|     /**
 | |
|      * 支付宝支付跳转方法
 | |
|      */
 | |
|     public function toAliPay(){
 | |
| 
 | |
|     	$payObj = input("payObj/s");
 | |
|     
 | |
|     	$call_back_url = "";
 | |
|     	$notify_url = "";
 | |
|     	$subject = "";
 | |
|     	$total_fee = 0;
 | |
|     	$transId = 0;
 | |
|     	$userId = 0;
 | |
|     	$payParams = array();
 | |
|     	if($payObj=="recharge"){//充值
 | |
|     		$itemId = (int)input("itemId/d");
 | |
| 			$orderAmount = 0;
 | |
| 			if($itemId>0){
 | |
|                 $cm = new CM();
 | |
| 				$item = $cm->getItemMoney($itemId);
 | |
| 				$total_fee = isSet($item["chargeMoney"])?$item["chargeMoney"]:0;
 | |
| 			}else{
 | |
| 				$total_fee = (int)input("needPay/d");
 | |
| 			}
 | |
| 			
 | |
|     		$shopId = (int)session('WST_USER.shopId');
 | |
|     		$targetType = ($shopId>0)?1:0;
 | |
| 			$targetId = (int)session('WST_USER.userId');
 | |
| 			if($targetType==1){//商家
 | |
| 				$targetId = $shopId;
 | |
| 			}
 | |
| 			$userId = $targetId;
 | |
| 			$out_trade_no = WSTOrderNo();
 | |
| 			$transId = $out_trade_no;
 | |
| 			$payParams["targetId"] = $targetId;
 | |
| 			$payParams["targetType"] = $targetType;
 | |
| 			$payParams["itemId"] = $itemId;
 | |
| 			$payParams["payObj"] = $payObj;
 | |
| 			
 | |
| 			$call_back_url = url("mobile/users/index","",true,true);
 | |
| 	    	$notify_url = url("mobile/alipays/aliNotify","",true,true);
 | |
| 	    	$subject = '钱包充值';
 | |
|     	}else{
 | |
|     		$orderNo = input('orderNo');
 | |
| 	    	$isBatch = (int)input('isBatch');
 | |
| 	    	$userId = (int)session('WST_USER.userId');
 | |
| 	    	$m = new OM();
 | |
| 			$obj = array();
 | |
| 			$obj["userId"] = $userId;
 | |
| 			$obj["orderNo"] = input("orderNo/s");
 | |
| 			$obj["isBatch"] = (int)input("isBatch/d");
 | |
| 	    	$rs = $m->getOrderPayInfo($obj);
 | |
| 	    	if(empty($rs)){
 | |
| 	    		$this->assign('type','');
 | |
| 	    		return $this->fetch("users/orders/orders_list");
 | |
| 	    	}else{
 | |
| 		    	$m = new M();
 | |
| 		    	$om = new OM();
 | |
| 				$data = $om->checkOrderPay($obj);
 | |
| 		    	if($data["status"]==-1){
 | |
| 		    		echo "<span style='font-size:40px;'>您的订单已支付,不要重复支付!</span>";
 | |
| 		    		return;
 | |
| 		    	}else if($data["status"]==-2){
 | |
| 		    		echo "<span style='font-size:40px;'>您的订单因商品库存不足,不能支付!</span>";
 | |
| 		    		return;
 | |
| 		    	}
 | |
| 	    	}
 | |
| 	    	$order = $om->getPayOrders($obj);
 | |
| 	    	$total_fee = $order["needPay"];
 | |
| 	    	$payRand = $order["payRand"];
 | |
| 	    	$out_trade_no = $obj["orderNo"]."a".$payRand;
 | |
| 	    	$transId = $obj["orderNo"];
 | |
| 	    	
 | |
| 	    	$payParams["userId"] = $userId;
 | |
| 	    	$payParams["isBatch"] = $isBatch;
 | |
| 	    	$payParams["orderNo"] = $orderNo;
 | |
| 	    	
 | |
| 	    	$call_back_url = url("mobile/orders/index","",true,true);
 | |
| 	    	$notify_url = url("mobile/alipays/aliNotify","",true,true);
 | |
| 	    	$subject = '支付购买商品费用';
 | |
|     	}
 | |
|     	
 | |
|     	$format = "xml";
 | |
|     	$v = "2.0";
 | |
|     	$req_id = date('Ymdhis');
 | |
|     	$merchant_url = "";
 | |
|     	$seller_email = $this->alipayConfig['seller_email'];
 | |
|     	
 | |
|     	$req_data = '<direct_trade_create_req><notify_url>' . $notify_url . '</notify_url><call_back_url>' . $call_back_url . '</call_back_url><seller_account_name>' . $seller_email . '</seller_account_name><out_trade_no>' . $out_trade_no . '</out_trade_no><subject>' . $subject . '</subject><total_fee>' . $total_fee . '</total_fee><merchant_url>' . $merchant_url . '</merchant_url></direct_trade_create_req>';
 | |
|     
 | |
|     	//构造要请求的参数数组,无需改动
 | |
|     	$para_token = array(
 | |
|     		"service" => "alipay.wap.trade.create.direct",
 | |
|     		"partner" => trim($this->alipayConfig['partner']),
 | |
|     		"sec_id" => trim($this->alipayConfig['sign_type']),
 | |
|     		"format"	=> $format,
 | |
|     		"v"	=> $v,
 | |
|     		"req_id"	=> $req_id,
 | |
|     		"req_data"	=> $req_data,
 | |
|     		"_input_charset"	=> trim(strtolower($this->alipayConfig['input_charset']))
 | |
|     	);
 | |
|     	//建立请求
 | |
|     	$alipaySubmit = new \AlipaySubmit($this->alipayConfig);
 | |
|     	$html_text = $alipaySubmit->buildRequestHttp($para_token);
 | |
|     	//URLDECODE返回的信息
 | |
|     	$html_text = urldecode($html_text);
 | |
|     	//解析远程模拟提交后返回的信息
 | |
|     	$para_html_text = $alipaySubmit->parseResponse($html_text);
 | |
|     	//获取request_token
 | |
|     	$request_token = $para_html_text['request_token'];
 | |
|     	//**************************根据授权码token调用交易接口alipay.wap.auth.authAndExecute**************************
 | |
|     	//业务详细
 | |
|     	$req_data = '<auth_and_execute_req><request_token>' . $request_token . '</request_token></auth_and_execute_req>';
 | |
|     	//必填
 | |
| 
 | |
|     	//构造要请求的参数数组,无需改动
 | |
|     	$parameter = array(
 | |
|     		"service" => "alipay.wap.auth.authAndExecute",
 | |
|     		"partner" => trim($this->alipayConfig['partner']),
 | |
|     		"sec_id" => trim($this->alipayConfig['sign_type']),
 | |
|     		"format"	=> $format,
 | |
|     		"v"	=> $v,
 | |
|     		"req_id"	=> $req_id,
 | |
|     		"req_data"	=> $req_data,
 | |
|     		"_input_charset"	=> trim(strtolower($this->alipayConfig['input_charset']))
 | |
|     	);
 | |
|     	
 | |
|     	$data = array();
 | |
|     	$data["userId"] = $userId;
 | |
|     	$data["transId"] = $transId;
 | |
|     	$data["paramsVa"] = json_encode($payParams);
 | |
|     	$data["payFrom"] = 'alipays';
 | |
|     	$m = new PM();
 | |
|     	$m->addPayLog($data);
 | |
|     	
 | |
|     	//建立请求
 | |
|     	$alipaySubmit = new \AlipaySubmit($this->alipayConfig);
 | |
|     	$html_text = $alipaySubmit->buildRequestForm($parameter, 'get', '');
 | |
|     	echo $html_text;
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * 服务器异步通知页面方法
 | |
|      *
 | |
|      */
 | |
|     function aliNotify() {
 | |
|     	$om = new OM();
 | |
|     	// 计算得出通知验证结果
 | |
|     	$alipayNotify = new \AlipayNotify ( $this->alipayConfig );
 | |
|     	$verify_result = $alipayNotify->verifyNotify ();
 | |
|     	
 | |
|     	if ($verify_result) {
 | |
|     		$notify_data = $_POST['notify_data'];
 | |
|     		// 获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
 | |
|     		// 解析notify_data
 | |
|     		// 注意:该功能PHP5环境及以上支持,需开通curl、SSL等PHP配置环境。建议本地调试时使用PHP开发软件
 | |
|     		$doc = new \DOMDocument ();
 | |
|     		$doc->loadXML ( $notify_data );
 | |
|     		if (! empty ( $doc->getElementsByTagName ( "notify" )->item ( 0 )->nodeValue )) {
 | |
|     			// 交易号
 | |
|     			$trade_no = $doc->getElementsByTagName ( "trade_no" )->item ( 0 )->nodeValue;
 | |
|     			// 商户订单号
 | |
|     			$out_trade_no = $doc->getElementsByTagName ( "out_trade_no" )->item ( 0 )->nodeValue;
 | |
|     
 | |
|     			$total_fee = $doc->getElementsByTagName( "total_fee" )->item(0)->nodeValue;
 | |
|     			// 支付宝交易号
 | |
|     			$trade_no = $doc->getElementsByTagName ( "trade_no" )->item ( 0 )->nodeValue;
 | |
|     			// 交易状态
 | |
|     			$trade_status = $doc->getElementsByTagName ( "trade_status" )->item ( 0 )->nodeValue;
 | |
|     			if ($trade_status == 'TRADE_FINISHED' OR $trade_status  == 'TRADE_SUCCESS') {
 | |
|     				$obj["trade_no"] = $trade_no;
 | |
|     				$tradeNo = explode("a",$out_trade_no);
 | |
|     				
 | |
|       				$obj["out_trade_no"] = $tradeNo[0];
 | |
|       				$obj["payFrom"] = 'alipays';
 | |
|       				$obj["total_fee"] = $total_fee;
 | |
|       				
 | |
|       				$m = new PM();
 | |
|       				$payParams = $m->getPayLog(["transId"=>$obj["out_trade_no"]]);
 | |
|       				if(isSet($payParams["payObj"]) && $payParams["payObj"]=='recharge'){
 | |
| 
 | |
| 						$obj["targetId"] = $payParams["targetId"];
 | |
| 						$obj["targetType"] = $payParams["targetType"];
 | |
| 						$obj["itemId"] = $payParams["itemId"];;
 | |
| 						// 支付成功业务逻辑
 | |
| 						$m = new LM();
 | |
| 						$rs = $m->complateRecharge ( $obj );
 | |
|       				}else{
 | |
|       					//$payFrom = $om->getOrderPayFrom($tradeNo[0]);
 | |
|       					$obj["userId"] = $payParams["userId"];
 | |
|       					$obj["isBatch"] = $payParams["isBatch"];
 | |
|       					//支付成功业务逻辑
 | |
|       					$rs = $om->complatePay($obj);
 | |
|       				}
 | |
| 
 | |
|     				if($rs["status"]==1){
 | |
|     					echo 'success';
 | |
|     				}else{
 | |
|     					echo 'fail';
 | |
|     				}
 | |
|     			}
 | |
|     			//echo "success"; // 请不要修改或删除
 | |
|     		}
 | |
|     	} else {
 | |
|     		// 验证失败
 | |
|     		echo "fail";
 | |
|     	}
 | |
|     }
 | |
| 
 | |
| }
 |