Config.php 配置项
<?php /** * Created by PhpStorm. * User: admin * Date: 2017/8/16 * Time: 09:16 */ namespace app\admin\model; use think\Model; class Config extends Model { public function alipay_config(){ $alipay_config = array( 'partner' => '', //收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号 'seller_id' =>'', // MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm 'key' => '', // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=>123这类自定义参数,必须外网可以正常访问 'notify_url' => "", // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=>123这类自定义参数,必须外网可以正常访问 'return_url' => "", //签名方式 'sign_type' => strtoupper('MD5'), //字符编码格式 目前支持 gbk 或 utf-8 'input_charset'=> strtolower('utf-8'), //ca证书路径地址,用于curl中ssl校验 //请保证cacert.pem文件在当前文件夹目录中 'cacert' => getcwd().'\\cacert.pem', //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http 'transport' => 'http', // 支付类型 ,无需修改 'payment_type'=> "1", // 产品类型,无需修改 'service'=> "create_direct_pay_by_user", //↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ //↓↓↓↓↓↓↓↓↓↓ 请在这里配置防钓鱼信息,如果没开通防钓鱼功能,为空即可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ // 防钓鱼时间戳 若要使用请调用类文件submit中的query_timestamp函数 'anti_phishing_key' => "", // 客户端的IP地址 非局域网的外网IP地址,如:221.0.0.1 'exter_invoke_ip' => "", ); return $alipay_config; } public function parameter(){ $config = new Config(); $alipay_config = $config->alipay_config(); $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'], "anti_phishing_key"=>$alipay_config['anti_phishing_key'], "exter_invoke_ip"=>$alipay_config['exter_invoke_ip'], "out_trade_no" => '', "subject" => '', "total_fee" => '', "body" => '', "_input_charset" => trim(strtolower($alipay_config['input_charset'])) //其他业务参数根据在线开发文档,添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.kiX33I&treeId=62&articleId=103740&docType=1 //如"参数名"=>"参数值" ); return $parameter; } }
Controller控制器层
<?php namespace app\admin\controller; use think\Controller; //使用控制器 use app\admin\model\Submit; use app\admin\model\Corefunction; use app\admin\model\Md5function; use app\admin\model\Notify; use app\admin\model\Config; use think\Db;//引入控制器 use think\Session;//引入控制器 class pay extends Controller { public function pay(){ vendor('Alipay.Corefunction'); vendor('Alipay.Md5function'); vendor('Alipay.Notify'); vendor('Alipay.Submit'); $out_trade_no = $_POST['WIDout_trade_no'];//订单名称,必填 $subject = $_POST['WIDsubject'];///商品描述,可空 $total_fee = $_POST['WIDtotal_fee'];//付款金额,必填 $body = $_POST['WIDout_trade_no']; $config = new Config(); $alipay_config = $config->alipay_config(); $parameter = $config->parameter(); $parameter['out_trade_no'] = $out_trade_no; $parameter['subject'] = $subject ; $parameter['total_fee'] = $total_fee ; $parameter['body'] = $body; session::set("money",$total_fee);//将金额存入session $alipaySubmit = new Submit($alipay_config); $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认"); return $html_text; } public function notify_url(){ $config = new Config(); $alipay_config = $config->alipay_config(); $alipayNotify = new Notify($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') { //判断该笔订单是否在商户网站中已经做过处理 } else if ($_POST['trade_status'] == 'TRADE_SUCCESS') { //判断该笔订单是否在商户网站中已经做过处 } echo "success"; //请不要修改或删除 } else { //验证失败 echo "fail"; /* 调试用,写文本函数记录程序运行情况是否正常 logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");*/ } return $this->fetch('autoinvest'); } public function return_url(){ $config = new Config(); $alipay_config = $config->alipay_config(); $alipayNotify = new Notify($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') { //判断该笔订单是否在商户网站中已经做过处理 } else { echo "trade_status=".$_GET['trade_status']; } } else { //验证失败 //如要调试,请看alipay_notify.php页面的verifyReturn函数 } } }
model层的文件均是 支付宝 的类库 修改而成 里面没有大的变动 只是加上TP5的model固定模式写法