记住用户名密码
电脑端网页 微信扫码支付和支付宝支付
注意:支付完成后的通知地址中,格式要使用a\5\b\3这种的,而不是a=5&b=3这种的,否则通知不到。
电脑端手机端的微信和支付宝支付都已掌握,贴一下代码备用 ,基于thinkphp
微信:
class WxpayMobile extends Action{ //在类初始化方法中,引入相关类库 public function _initialize() { header("Content-type:text/html;charset=utf-8"); vendor('WxPayPubHelper.SDKRuntimeException'); define("APPID", C('WX_APPID')); define("MCHID", C('WX_MCHID')); define("KEY", C('WX_KEY')); define("APPSECRET", C('WX_APPSECRET')); define("JS_API_CALL_URL", C('site_url').U('Wxpay/wap_dowxpay')); define('SSLCERT_PATH',C('site_url').'/Framework/Extend/Vendor/WxPayPubHelper/cacert/apiclient_cert.pem'); define('SSLKEY_PATH',C('site_url').'/Framework/Extend/Vendor/WxPayPubHelper/cacert/apiclient_key.pem'); define('NOTIFY_URL',C('site_url').'/index.php/Wxpay/通知接口'); define('CURL_TIMEOUT',30); vendor('WxPayPubHelper.WxPayPubHelper'); } public function index() { echo "禁止访问"; } public function dowxpay(){ //使用统一支付接口 $unifiedOrder = new UnifiedOrder_pub(); $fee = $_POST['pay_cash']*100; //echo "'".$_POST['mas_id']."'"; //设置统一支付接口参数 //设置必填参数 //appid已填,商户无需重复填写 //mch_id已填,商户无需重复填写 //noncestr已填,商户无需重复填写 //spbill_create_ip已填,商户无需重复填写 //sign已填,商户无需重复填写 $unifiedOrder->setParameter("body","订单付款");//商品描述 //自定义订单号,此处仅作举例 $out_trade_no = $_POST['order_no']; $unifiedOrder->setParameter("out_trade_no",$out_trade_no);//商户订单号 $unifiedOrder->setParameter("total_fee",$fee);//总金额 $unifiedOrder->setParameter("notify_url",NOTIFY_URL);//通知地址 $unifiedOrder->setParameter("trade_type","NATIVE");//交易类型 //非必填参数,商户可根据实际情况选填 //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号 //$unifiedOrder->setParameter("device_info","XXXX");//设备号 //$unifiedOrder->setParameter("attach","'".$_POST['mas_id']."'");//附加数据 //$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间 //$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间 //$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记 //$unifiedOrder->setParameter("openid","XXXX");//用户标识 //$unifiedOrder->setParameter("product_id","XXXX");//商品ID //获取统一支付接口结果 $unifiedOrderResult = $unifiedOrder->getResult(); //print_r($unifiedOrderResult); //商户根据实际情况设置相应的处理流程 if ($unifiedOrderResult["return_code"] == "FAIL") { //商户自行增加处理流程 // echo "通信出错:".$unifiedOrderResult['return_msg']."<br>"; } elseif($unifiedOrderResult["result_code"] == "FAIL") { //商户自行增加处理流程 // echo "错误代码:".$unifiedOrderResult['err_code']."<br>"; //echo "错误代码描述:".$unifiedOrderResult['err_code_des']."<br>"; } elseif($unifiedOrderResult["code_url"] != NULL) { //从统一支付接口获取到code_url $code_url = $unifiedOrderResult["code_url"]; //商户自行增加处理流程 //...... } $this->assign('code_url',$code_url); $this->assign('out_trade_no',$out_trade_no); $this->display(); } //支付界面 public function pay_online(){ //获取会员信息 if(!isset($_SESSION['open_id'])){ get_code(); } $Apply = D('ApplyView'); $where = array( 'id'=>$_GET['out_trade_no'], ); $my_order=$Apply->where($where)->find(); //$my_order = $Apply->where($where)->find(); if(empty($my_order)){ $this->error('该订单不存在!',U('User/index')); }elseif($my_order['pay_state']==1){ $this->error('该订单已经支付过!',U('User/index')); }else{ header("Content-type:text/html;charset=utf-8"); //获取店铺微信支付数据 define("APPID", C('WX_APPID')); define("MCHID", C('WX_MCHID')); define("KEY", C('WX_KEY')); define("APPSECRET", C('WX_APPSECRET')); define('NOTIFY_URL','http://'.$_SERVER['HTTP_HOST'].'/index.php/Wxpay/notifyurl'); define('CURL_TIMEOUT',30); vendor('WxPayPubHelper.WxPayPubHelper'); vendor('WxPayPubHelper.SDKRuntimeException'); $out_trade_no = $my_order['id']; //订单号 $fee = $my_order['cost']; //应付金额 //使用jsapi接口 $jsApi = new JsApi_pub(); //=========步骤1:网页授权获取用户openid============ //通过code获得openid $openid = $_SESSION['open_id']; //=========步骤2:使用统一支付接口,获取prepay_id============ //使用统一支付接口 $unifiedOrder = new UnifiedOrder_pub(); /* 2015年10月12日 18:27:53 用户子商户付款 ↓*/ //$Shop = M('Shop'); //$shop = $Shop->where('shopid = '.$my_order['shopid'])->find(); //$unifiedOrder->setParameter("sub_appid",$shop['wx_appid']);//子商户号码 // echo $shop['wx_appid']; // $unifiedOrder->setParameter("sub_mch_id",MCHID);//子商户号码 /* 2015年10月12日 18:27:53 用户子商户付款 ↑*/ //dump($openid);dump($out_trade_no);dump(NOTIFY_URL); $unifiedOrder->setParameter("openid","$openid");//商品描述 $unifiedOrder->setParameter("body","报名付款");//商品描述 //自定义订单号,此处仅作举例 $unifiedOrder->setParameter("out_trade_no",$out_trade_no);//商户订单号 $unifiedOrder->setParameter("total_fee",$fee*100);//总金额 $unifiedOrder->setParameter("notify_url",NOTIFY_URL);//通知地址 $unifiedOrder->setParameter("trade_type","JSAPI");//交易类型 $prepay_id = $unifiedOrder->getPrepayId(); if($prepay_id==null){ $this->error('发起支付失败,请联系管理员!',U('User/index')); } //=========步骤3:使用jsapi调起支付============ $jsApi->setPrepayId($prepay_id); $jsApiParameters = $jsApi->getParameters(); $this->assign('jsApiParameters',$jsApiParameters); $this->assign('my_order',$my_order); $this->assign('share_ok_url',U('User/index')); $this->assign('title',"微信支付"); $this->display(); } } public function wap_dowxpay(){ if($_POST['order_no']){ $_SESSION['order_no'] = $_POST['order_no']; } if($_POST['pay_cash']){ $_SESSION['pay_cash'] = $_POST['pay_cash']; } if($_SESSION['order_no']){ $out_trade_no = $_SESSION['order_no']; } if($_SESSION['pay_cash']){ $fee = $_SESSION['pay_cash']; } //使用jsapi接口 $jsApi = new JsApi_pub(); //=========步骤1:网页授权获取用户openid============ //通过code获得openid if (!isset($_GET['code'])) { //触发微信返回code码 $url = $jsApi->createOauthUrlForCode(JS_API_CALL_URL); Header("Location: $url"); }else { //获取code码,以获取openid $code = $_GET['code']; $jsApi->setCode($code); $openid = $jsApi->getOpenId(); } //=========步骤2:使用统一支付接口,获取prepay_id============ //使用统一支付接口 $unifiedOrder = new UnifiedOrder_pub(); //设置统一支付接口参数 //设置必填参数 //appid已填,商户无需重复填写 //mch_id已填,商户无需重复填写 //noncestr已填,商户无需重复填写 //spbill_create_ip已填,商户无需重复填写 //sign已填,商户无需重复填写 $unifiedOrder->setParameter("openid","$openid");//商品描述 $unifiedOrder->setParameter("body","订单付款");//商品描述 //自定义订单号,此处仅作举例 $unifiedOrder->setParameter("out_trade_no",$out_trade_no);//商户订单号 $unifiedOrder->setParameter("total_fee",$fee*100);//总金额 $unifiedOrder->setParameter("notify_url",NOTIFY_URL);//通知地址 $unifiedOrder->setParameter("trade_type","JSAPI");//交易类型 //非必填参数,商户可根据实际情况选填 //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号 //$unifiedOrder->setParameter("device_info","XXXX");//设备号 //$unifiedOrder->setParameter("attach","XXXX");//附加数据 //$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间 //$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间 //$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记 //$unifiedOrder->setParameter("openid","XXXX");//用户标识 //$unifiedOrder->setParameter("product_id","XXXX");//商品ID $prepay_id = $unifiedOrder->getPrepayId(); //=========步骤3:使用jsapi调起支付============ $jsApi->setPrepayId($prepay_id); $jsApiParameters = $jsApi->getParameters(); $this->assign('catename',"微信支付"); $this->assign('pay_cash',$fee); $this->assign('jsApiParameters',$jsApiParameters); $this->assign_ur_here('微信支付',array(array('title'=>'微信支付','url'=>U('Index/wap_dowxpay')))); $this->display('Index:wap_dowxpay'); } /****************************** 服务器异步通知页面方法 其实这里就是将notify_url.php文件中的代码复制过来进行处理 *******************************/ public function notifyurl(){ //使用通用通知接口 $notify = new Notify_pub(); //存储微信的回调 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; $notify->saveData($xml); //验证签名,并回应微信。 //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败, //微信会通过一定的策略(如30分钟共8次)定期重新发起通知, //尽可能提高通知的成功率,但微信不保证通知最终能成功。 if($notify->checkSign() == FALSE){ $notify->setReturnParameter("return_code","FAIL");//返回状态码 $notify->setReturnParameter("return_msg","签名失败");//返回信息 }else{ $notify->setReturnParameter("return_code","SUCCESS");//设置返回码 } $returnXml = $notify->returnXml(); echo $returnXml; //==商户根据实际情况设置相应的处理流程,此处仅作举例======= //$log_name="notify_url.log";//log文件路径 //$this->log_result($log_name,"【接收到的notify通知】:\n".$xml."\n"); if($notify->checkSign() == TRUE) { if ($notify->data["return_code"] == "FAIL") { //此处应该更新一下订单状态,商户自行增删操作 //$this->log_result($log_name,"【通信出错】:\n".$xml."\n"); } elseif($notify->data["result_code"] == "FAIL"){ //此处应该更新一下订单状态,商户自行增删操作 //$this->log_result($log_name,"【业务出错】:\n".$xml."\n"); } else{ //此处应该更新一下订单状态,商户自行增删操作 //买家支付成功,开始修改订单的支付方式和付款状态 //$this->log_result($log_name,$out_trade_no."【支付成功0000】:\n".$xml."\n"); $out_trade_no = $notify->data["out_trade_no"]; $Apply=M('Apply'); $data['pay_state']=1; $data['pay_type']='wxpay'; $ret= $Apply->where(array('id'=>$out_trade_no))->save($data); if($ret){ echo "success"; } } } } //查询订单的支付状态 public function order_query(){ //退款的订单号 if (!isset($_POST["out_trade_no"])) { $out_trade_no = " "; }else{ $out_trade_no = $_POST["out_trade_no"]; //使用订单查询接口 $orderQuery = new OrderQuery_pub(); $orderQuery->setParameter("out_trade_no","$out_trade_no");//商户订单号 //获取订单查询结果 $orderQueryResult = $orderQuery->getResult(); //商户根据实际情况设置相应的处理流程,此处仅作举例 if ($orderQueryResult["return_code"] == "FAIL") { echo json_encode($orderQueryResult["return_code"]); } elseif($orderQueryResult["result_code"] == "FAIL"){ echo json_encode($orderQueryResult["result_code"]); } else{ echo json_encode($orderQueryResult['trade_state']); } } } //空操作处理,所有空操作都指向空模块 public function _empty(){ $this->redirect('Empty/index'); } //获取面包屑标题 protected function assign_ur_here($title,$bread){ //$bread 是一个数组 array $bread = array('title'=>'ThinkPHP','url'=>'ThinkPHP@gmail.com'); $breadcrumb = "<a href=".U('Index/index').">首页</a>"; foreach($bread as $key=>$v){ $breadcrumb.= "><a href='".$v['url']."'>".$v['title']."</a>"; } $this->assign('breadcrumb',$breadcrumb); $this->assign('seo_title',$title); } }
支付宝:
class AlipayMobile extends Action{ public function _initialize() { header("Content-type:text/html;charset=utf-8"); } public function index() { echo "禁止访问"; } //doalipay方法 /*该方法其实就是将接口文件包下alipayapi.php的内容复制过来 然后进行相关处理 */ public function doalipay(){ vendor('Alipay.Corefunction'); vendor('Alipay.Md5function'); vendor('Alipay.Notify'); vendor('Alipay.Submit'); /**************************请求参数**************************/ //这里我们通过TP的C函数把配置项参数读出,赋给$alipay_config; $alipay_config = array( 'partner' => C('alipay_partner'), //这里是你在成功申请支付宝接口后获取到的PID; 'key' => C('alipay_key'),//这里是你在成功申请支付宝接口后获取到的Key 'private_key_path' => 'key/rsa_private_key.pem', 'ali_public_key_path' => 'key/alipay_public_key.pem', 'sign_type' => strtoupper('MD5'), 'input_charset' => 'utf-8', 'cacert' => getcwd().'\\cacert.pem', 'transport' => 'http', ); $notify_url = C('site_url').'/index.php/Alipay/通知接口'; //服务器异步通知页面路径 $return_url = C('site_url').U('User/index'); //页面跳转同步通知页面路径 $payment_type = "1"; //支付类型 //必填,不能修改 $seller_email = C('alipay_seller_email');//卖家支付宝帐户必填 $out_trade_no = $_POST['order_no'];//商户订单号 通过支付页面的表单进行传递,注意要唯一! $subject = "对订单".$_POST['order_no'].'付款'; //订单名称 //必填 通过支付页面的表单进行传递 $total_fee = $_POST['pay_cash']; //付款金额 //必填 通过支付页面的表单进行传递 $body = '订单付款'; $anti_phishing_key = "";//防钓鱼时间戳 //若要使用请调用类文件submit中的query_timestamp函数 $exter_invoke_ip = get_client_ip(); //客户端的IP地址 /************************************************************/ $extra_common_param = $_SESSION['master']['mas_id']; //构造要请求的参数数组,无需改动 $parameter = array( "service" => "create_direct_pay_by_user", "partner" => trim(C('alipay_partner')), "payment_type" => $payment_type, "notify_url" => $notify_url, "return_url" => $return_url, "seller_email" => $seller_email, "out_trade_no" => $out_trade_no, "subject" => $subject, "total_fee" => $total_fee, "body" => $body, "extra_common_param" => $extra_common_param, "anti_phishing_key" => $anti_phishing_key, "exter_invoke_ip" => $exter_invoke_ip, "_input_charset" => trim(strtolower($alipay_config['input_charset'])) ); //建立请求 $alipaySubmit = new AlipaySubmit($alipay_config); $html_text = $alipaySubmit->buildRequestForm($parameter,"post", "确认"); echo $html_text; } //手机端支付 public function wap_doalipay(){ header("Content-type:text/html;charset=utf-8"); vendor('Wap_alipay.Corefunction'); vendor('Wap_alipay.Md5function'); vendor('Wap_alipay.Notify'); vendor('Wap_alipay.Submit'); $alipay_config = array( 'partner' => C('alipay_partner'), //这里是你在成功申请支付宝接口后获取到的PID; 'key' => C('alipay_key'),//这里是你在成功申请支付宝接口后获取到的Key 'private_key_path' => 'key/rsa_private_key.pem', 'ali_public_key_path' => 'key/alipay_public_key.pem', 'sign_type' => strtoupper('MD5'), 'input_charset' => 'utf-8', 'cacert' => getcwd().'\\cacert.pem', 'transport' => 'http', ); //返回格式 $format = "xml"; //必填,不需要修改 //返回格式 $v = "2.0"; //必填,不需要修改 //请求号 $req_id = date('Ymdhis'); //必填,须保证每次请求都是唯一 //**req_data详细信息** //服务器异步通知页面路径 $notify_url = C('site_url').'/index.php/Alipay/wap_notifyurl'; //服务器异步通知页面路径 //需http://格式的完整路径,不允许加?id=123这类自定义参数 //页面跳转同步通知页面路径 $call_back_url = C('site_url').'/index.php/User/index'; //页面跳转同步通知页面路径 //需http://格式的完整路径,不允许加?id=123这类自定义参数 //操作中断返回地址 $merchant_url = C('site_url').'/index.php/User/index'; //页面跳转同步通知页面路径 //用户付款中途退出返回商户的地址。需http://格式的完整路径,不允许加?id=123这类自定义参数 //卖家支付宝帐户 $seller_email = C('alipay_seller_email'); //必填 //商户订单号 $out_trade_no = $_GET['order_no']; //商户网站订单系统中唯一订单号,必填 //订单名称 $subject = "对订单".$out_trade_no.'付款'; //必填 //查询付款金额 $where=array( "is_del"=>'0', "id"=>$out_trade_no ); $Apply=M('Apply'); $data=$Apply->where($where)->find(); $total_fee = $data['cost']; //必填 通过支付页面的表单进行传递$acount //dump($out_trade_no);dump($subject);dump($data);dump($total_fee); //return; //付款金额 //$total_fee = $_POST['pay_cash']; //必填 通过支付页面的表单进行传递$acount //必填 $pay_expire = 3; //三分钟有效 //请求业务参数详细 $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><pay_expire>'.$pay_expire.'</pay_expire></direct_trade_create_req>'; //必填 /************************************************************/ //构造要请求的参数数组,无需改动 $para_token = array( "service" => "alipay.wap.trade.create.direct", "partner" => trim($alipay_config['partner']), "sec_id" => trim($alipay_config['sign_type']), "format" => $format, "v" => $v, "req_id" => $req_id, "req_data" => $req_data, "_input_charset" => trim(strtolower($alipay_config['input_charset'])) ); //dump($para_token); //return; //建立请求 $alipaySubmit = new AlipaySubmit($alipay_config); $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($alipay_config['partner']), "sec_id" => trim($alipay_config['sign_type']), "format" => $format, "v" => $v, "req_id" => $req_id, "req_data" => $req_data, "_input_charset" => trim(strtolower($alipay_config['input_charset'])) ); //建立请求 $alipaySubmit = new AlipaySubmit($alipay_config); $html_text = $alipaySubmit->buildRequestForm($parameter, 'get', '确认'); echo $html_text; } /****************************** 手机支付宝的异步接收 *******************************/ public function wap_notifyurl(){ vendor('Wap_alipay.Corefunction'); vendor('Wap_alipay.Md5function'); vendor('Wap_alipay.Notify'); vendor('Wap_alipay.Submit'); //这里我们通过TP的C函数把配置项参数读出,赋给$alipay_config; $alipay_config = array( 'partner' => C('alipay_partner'), //这里是你在成功申请支付宝接口后获取到的PID; 'key' => C('alipay_key'),//这里是你在成功申请支付宝接口后获取到的Key 'private_key_path' => 'key/rsa_private_key.pem', 'ali_public_key_path' => 'key/alipay_public_key.pem', 'sign_type' => strtoupper('MD5'), 'input_charset' => 'utf-8', 'cacert' => getcwd().'\\cacert.pem', 'transport' => 'http', ); //计算得出通知验证结果 $alipayNotify = new AlipayNotify($alipay_config); $verify_result = $alipayNotify->verifyNotify(); if($verify_result) {//验证成功 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 //解析notify_data //注意:该功能PHP5环境及以上支持,需开通curl、SSL等PHP配置环境。建议本地调试时使用PHP开发软件 $doc = new DOMDocument(); if ($alipay_config['sign_type'] == 'MD5') { $doc->loadXML($_POST['notify_data']); } if ($alipay_config['sign_type'] == '0001') { $doc->loadXML($alipayNotify->decrypt($_POST['notify_data'])); } if( ! empty($doc->getElementsByTagName( "notify" )->item(0)->nodeValue) ) { //商户订单号 $out_trade_no = $doc->getElementsByTagName( "out_trade_no" )->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') { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在两种情况下出现 //1、开通了普通即时到账,买家付款成功后。 //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。 //调试用,写文本函数记录程序运行情况是否正常 //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录"); echo "success"; //请不要修改或删除 } else if ($trade_status == 'TRADE_SUCCESS') { //买家支付成功,开始修改订单的支付方式和付款状态 //买家支付成功,开始修改订单的支付方式和付款状态 /*$Apply=M('Apply'); $data['pay_state']=1; $data['pay_type']='alipay'; $ret= $Apply->where(array('id'=>$out_trade_no))->save($data); if($ret){ echo "success"; }*/ } echo "success"; //请不要修改或删除 } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } else { //验证失败 echo "fail".$_SESSION['master']['mas_id']; //调试用,写文本函数记录程序运行情况是否正常 //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录"); } } /****************************** 服务器异步通知页面方法 其实这里就是将notify_url.php文件中的代码复制过来进行处理 *******************************/ public function notifyurl(){ vendor('Alipay.Corefunction'); vendor('Alipay.Md5function'); vendor('Alipay.Notify'); vendor('Alipay.Submit'); //这里我们通过TP的C函数把配置项参数读出,赋给$alipay_config; $alipay_config = array( 'partner' => C('alipay_partner'), //这里是你在成功申请支付宝接口后获取到的PID; 'key' => C('alipay_key'),//这里是你在成功申请支付宝接口后获取到的Key 'private_key_path' => 'key/rsa_private_key.pem', 'ali_public_key_path' => 'key/alipay_public_key.pem', 'sign_type' => strtoupper('MD5'), 'input_charset' => 'utf-8', 'cacert' => getcwd().'\\cacert.pem', 'transport' => 'http', ); //计算得出通知验证结果 $alipayNotify = new AlipayNotify($alipay_config); $verify_result = $alipayNotify->verifyNotify(); if($verify_result) { //验证成功 //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 $out_trade_no = $_POST['out_trade_no']; //商户订单号 $extra_common_param = $_POST['extra_common_param']; $trade_no = $_POST['trade_no']; //支付宝交易号 $trade_status = $_POST['trade_status']; //交易状态 $total_fee = $_POST['total_fee']; //交易金额 $notify_id = $_POST['notify_id']; //通知校验ID。 $notify_time = $_POST['notify_time']; //通知的发送时间。格式为yyyy-MM-dd HH:mm:ss。 $buyer_email = $_POST['buyer_email']; //买家支付宝帐号; $parameter = array( "out_trade_no" => $out_trade_no, //商户订单编号; "trade_no" => $trade_no, //支付宝交易号; "total_fee" => $total_fee, //交易金额; "trade_status" => $trade_status, //交易状态 "extra_common_param" => $extra_common_param, "notify_id" => $notify_id, //通知校验ID。 "notify_time" => $notify_time, //通知的发送时间。 "buyer_email" => $buyer_email, //买家支付宝帐号; ); if($_POST['trade_status'] == 'TRADE_FINISHED') { }else if ($_POST['trade_status'] == 'TRADE_SUCCESS') { //买家支付成功,开始修改订单的支付方式和付款状态 $Apply=M('Apply'); $data['pay_state']=1; $data['pay_type']='alipay'; $ret= $Apply->where(array('id'=>$out_trade_no))->save($data); if($ret){ echo "success"; } } echo "success"; //请不要修改或删除 }else { //验证失败 echo "fail".$_SESSION['master']['mas_id']; } } /* 页面跳转处理方法; 这里其实就是将return_url.php这个文件中的代码复制过来,进行处理; */ public function returnurl(){ vendor('Alipay.Corefunction'); vendor('Alipay.Md5function'); vendor('Alipay.Notify'); vendor('Alipay.Submit'); //这里我们通过TP的C函数把配置项参数读出,赋给$alipay_config; $alipay_config = array( 'partner' => C('alipay_partner'), //这里是你在成功申请支付宝接口后获取到的PID; 'key' => C('alipay_key'),//这里是你在成功申请支付宝接口后获取到的Key 'private_key_path' => 'key/rsa_private_key.pem', 'ali_public_key_path' => 'key/alipay_public_key.pem', 'sign_type' => strtoupper('MD5'), 'input_charset' => 'utf-8', 'cacert' => getcwd().'\\cacert.pem', 'transport' => 'http', ); $notify_url = C('site_url').'/index.php/Alipay/notifyurl'; //服务器异步通知页面路径 $return_url = C('site_url').U('User/order'); //页面跳转同步通知页面路径 $alipayNotify = new AlipayNotify($alipay_config);//计算得出通知验证结果 $verify_result = $alipayNotify->verifyReturn(); if($verify_result) { //验证成功 if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') { $this->success('支付成功',$return_url); }else { $this->error('支付失败,'.$_GET['trade_status'],$return_url); } }else { //验证失败 //如要调试,请看alipay_notify.php页面的verifyReturn函数 $this->error('支付失败,'.$_GET['trade_status'],$return_url); } } //空操作处理,所有空操作都指向空模块 public function _empty(){ $this->redirect('Empty/index'); } }
目前有 0 条留言 其中:访客:0 条, 博主:0 条