HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/dd.cwoyt.com/Application/Home/Controller/AlipayController.class.php
<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 赛脑 <2233759493@qq.com> <http://www.sn.com>
// +----------------------------------------------------------------------

namespace Home\Controller;

/**
 * 前台首页控制器
 * 主要获取首页聚合数据
 */
class AlipayController extends HomeController {
	

	public function alipay_config(){
		
		//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
		//合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址:https://openhome.alipay.com/platform/keyManage.htm?keyType=partner
		$alipay_config['partner']		= M('config')->where('id = 50')->getField('value');

		//收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号
		$alipay_config['seller_id']	= $alipay_config['partner'];

		//商户的私钥,此处填写原始私钥去头去尾,RSA公私钥生成:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.nBDxfy&treeId=58&articleId=103242&docType=1
		$alipay_config['private_key']	= M('config')->where('id = 51')->getField('value');

		//支付宝的公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm?keyType=partner
		$alipay_config['alipay_public_key']= M('config')->where('id = 52')->getField('value');

		// 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
		$alipay_config['notify_url'] = _SERVER_NAME_."/notify_url.php";

		// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
		$alipay_config['return_url'] = _SERVER_NAME_."/return_url.php";

		//签名方式
		$alipay_config['sign_type']    = strtoupper('RSA');

		//字符编码格式 目前支持utf-8
		$alipay_config['input_charset']= strtolower('utf-8');

		//ca证书路径地址,用于curl中ssl校验
		//请保证cacert.pem文件在当前文件夹目录中
		$alipay_config['cacert']    = getcwd().'\\cacert.pem';

		//访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
		$alipay_config['transport']    = 'http';
		$alipay_config['app_pay ']    = 'Y';

		// 支付类型 ,无需修改
		$alipay_config['payment_type'] = "1";
				
		// 产品类型,无需修改
		$alipay_config['service'] = "alipay.wap.create.direct.pay.by.user";
        
		return $alipay_config;
		
		
		
	}

	//系统首页
    public function index(){
    	header("Content-type:text/html;charset=utf-8");
		$alipay_config = $this->alipay_config();
		/**************************请求参数**************************/
		
		$ordernum = I('get.ordernum');
		$orderList = M('order')->where('ordernum = "'.$ordernum.'"')->select();
		
		if($orderList){
			$title = M('product')->where('proid = '.$orderList['0']['proid'])->getField('title');
			$total='';
			foreach($orderList as $k=>$v){
				$total += $v['total'];
			}
			
		}else{
			$this->error('订单不存在!',U('Home/Index/index'));
		}
		
		
        //商户订单号,商户网站订单系统中唯一订单号,必填
        $out_trade_no = $ordernum;

        //订单名称,必填
        $subject = $title;

        //付款金额,必填
        $total_fee = $total;

        //收银台页面上,商品展示的超链接,必填
        $show_url = 'http://'.$_SERVER['SERVER_NAME'];

        //商品描述,可空
        $body = $title;

		/************************************************************/

		//构造要请求的参数数组,无需改动
		$parameter = array(
				"service"       => $alipay_config['service'],
				"partner"       => $alipay_config['partner'],
				"seller_id"  => $alipay_config['seller_id'],
				"payment_type"	=> $alipay_config['payment_type'],
				"notify_url"	=> $alipay_config['notify_url'],
				"return_url"	=> $alipay_config['return_url'],
				"_input_charset"	=> trim(strtolower($alipay_config['input_charset'])),
				"out_trade_no"	=> $out_trade_no,
				"subject"	=> $subject,
				"total_fee"	=> $total_fee,
				"show_url"	=> $show_url,
				//"app_pay"	=> "Y",//启用此参数能唤起钱包APP支付宝
				"body"	=> $body,
				//其他业务参数根据在线开发文档,添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.2Z6TSk&treeId=60&articleId=103693&docType=1
				//如"参数名"	=> "参数值"   注:上一个参数末尾需要“,”逗号。
				
		);
	//	p($parameter);exit;
		//建立请求
		require(VENDOR_PATH.'lib/alipay_submit.class.php');
		$alipaySubmit = new \AlipaySubmit($alipay_config);
		$html_text = $alipaySubmit->buildRequestForm($parameter,"post", "确认");
		echo $html_text;
				
		
    }
	
	
	
	public function notify_url(){
		
		require(VENDOR_PATH.'lib/alipay_notify.class.php');
		$alipay_config = $this->alipay_config();
		//计算得出通知验证结果
		$alipayNotify = new \AlipayNotify($alipay_config);
		$verify_result = $alipayNotify->verifyNotify();

		if($verify_result) {//验证成功
			

			$out_trade_no = $_POST['out_trade_no'];
			$trade_no = $_POST['trade_no'];
			$trade_status = $_POST['trade_status'];

			if($_POST['trade_status'] == 'TRADE_FINISHED') {
				
				if(M('order')->where('ordernum = "'.$out_trade_no.'"')->find()){
					M('order')->where('ordernum = "'.$out_trade_no.'"')->save(array('paytime' => time()));
				}
			}
			else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
				
				$orderList = M('order')->where('ordernum = "'.$out_trade_no.'"')->select();
				if($orderList){
					logWrite('【支付成功】 订单号:'.$out_trade_no,'alipay');
					M('order')->where('ordernum = "'.$out_trade_no.'"')->save(array('paytime' => time()));
					
					$email_value = M('config')->where('id = 64')->getField('value');
					$status = M('config')->where('id = 71')->getField('value');
					$pay = require './Application/Common/Conf/pay.php';
					$html = M('config')->where('id = 103')->getField('value');
					$dx = M('config')->where('id = 78')->getField('value');
					
					foreach($orderList as $k=>$v){
						//减去库存
						M('product_norms')->where('nid = '.$v['nid'])->setDec('number',$v['num']);
						//计算折扣
						$temp = M('template')->where('tid = '.$v['tid'])->field('pay_type,alert,alert_type,alert_href,alert_content')->find();
						$order = M('order')->where('orderid = '.$v['orderid'])->getField('total');
						$temp['pay_type'] = unserialize($temp['pay_type']);
						$total = $temp['pay_type']['huodao']['discount']*$order;
						
						M('order')->where('orderid = '.$v['orderid'])->save(array('total' => $total));
				
						
						if($email_value == 1){
							
							$info['temp'] = M('template')->where('tid = '.$v['tid'])->field('size_title,color_title')->find();
							if($v['color']){
								$color = $info['temp']['color_title'].' :'.$v['color'];
							}
							if($v['size']){
								$size = $info['temp']['size_title'].' :'.$v['size'];
							}
							
							$v['time'] = date('Y-m-d H:i',$v['addtime']);
							$v['paytype'] = $pay[$v['paytype']];
							foreach($v as $ke=>$ve){
								$datakarr[] = "{".$ke."}";
								$datavarr[] = $ve;
							}
							$data_html .= str_replace($datakarr,$datavarr,$html);
						}
						
						if($status == 1){
							if($v['sms'] == 0){
								$dx_arr = unserialize($dx);
								if(in_array('gk',$dx_arr)){
									$gk = M('config')->where('id = 76')->getField('value');
									$order_gk = M('order')->where('orderid = '.$v['orderid'])->find();
									$order_gk['time'] = date('Y-m-d H:i',$order_gk['addtime']);
									$gk_html  = '';
									foreach($order_gk as $kgk=>$vgk){
										$gkkarr[] = "{".$kgk."}";
										$kkvarr[] = $vgk;
									}
									$gk_html = str_replace($gkkarr,$kkvarr,$gk);
									
									sms($v['phone'],$gk_html);
								}
								
								if(in_array('sj',$dx_arr)){
									$sj = M('config')->where('id = 77')->getField('value');
									$order_sj = M('order')->where('orderid = '.$v['orderid'])->find();
									$order_sj['time'] = date('Y-m-d H:i',$order_sj['addtime']);
									$sj_html  = '';
									foreach($order_sj as $ksj=>$vsj){
										$sjkarr[] = "{".$ksj."}";
										$sjvarr[] = $vsj;
									}
									$sj_html = str_replace($sjkarr,$sjvarr,$sj);
									$sj_phone = M('config')->where('id = 82')->getField('value');
									
									sms($sj_phone,$sj_html);
								}
							}
							M('order')->where('orderid = "'.$v['orderid'].'"')->save(array('sms' => 1));
						}
						
					}
					
					if($email_value == 1){
						$email_title = M('config')->where('id = 70')->getField('value');
						$email = M('config')->where('id = 60')->getField('value');
						send_email($email,$email_title,$data_html);
					}
				}
				
			}

			echo "success";		//请不要修改或删除
			
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		}
		else {
			//验证失败
			echo "fail";

			
		}
				
	}

	
	public function return_url(){
		
		require(VENDOR_PATH.'lib/alipay_notify.class.php');
		$alipay_config = $this->alipay_config();
		$alipayNotify = new \AlipayNotify($alipay_config);
		$verify_result = $alipayNotify->verifyReturn();
		if($verify_result) {//验证成功
			$out_trade_no = $_GET['out_trade_no'];
			$trade_no = $_GET['trade_no'];
			$trade_status = $_GET['trade_status'];
			
			if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
				
					if(M('order')->where('ordernum = "'.$out_trade_no.'"')->find()){
						M('order')->where('ordernum = "'.$out_trade_no.'"')->save(array('paytime' => time()));
					}
			}
			else {
			
				if(M('order')->where('ordernum = "'.$out_trade_no.'"')->find()){
					M('order')->where('ordernum = "'.$out_trade_no.'"')->save(array('paytime' => time()));
				}
			}
				
			//echo "验证成功<br />";
			//$this->redirect('Home/index/order',array('ordernum' => $out_trade_no));
			$url = _SERVER_NAME_.'/index.php?s=/home/index/order/ordernum/'.$out_trade_no.'.html';
			header("Location: $url"); 
			//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
			
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		}
		else {
			
			$url = _SERVER_NAME_.'/index.php?s=/home/index/index.html';
			header("Location: $url"); 
			
		}
		
	}
	
	
}