format = 'xml'; $this->v = '2.0'; $this->req_id = date('Ymdhis'); $this->notify_url = MOBILE_SITE_URL.'/api/payment/alipay/notify_url.php'; $this->call_back_url = MOBILE_SITE_URL.'/api/payment/alipay/call_back_url.php'; $this->seller_email = $param['alipay_account']; //v3-b11 $this->out_trade_no = $param['order_sn'].'-'.$param['order_type']; $this->subject = $param['order_sn']; $this->total_fee = $param['order_amount']; $this->alipay_config = array( 'partner' => $param['alipay_partner'], 'key' => $param['alipay_key'], 'private_key_path' => 'key/rsa_private_key.pem', 'ali_public_key_path' => 'key/alipay_public_key.pem', 'sign_type' => 'MD5', 'input_charset' => 'utf-8', 'cacert' => getcwd().'\\cacert.pem', 'transport' => 'http' ); //请求业务参数详细 $req_data = '' . $this->notify_url . '' . $this->call_back_url . '' . $this->seller_email . '' . $this->out_trade_no . '' . $this->subject . '' . $this->total_fee . ''; //必填 //构造要请求的参数数组,无需改动 $para_token = array( "service" => "alipay.wap.trade.create.direct", "partner" => trim($this->alipay_config['partner']), "sec_id" => trim($this->alipay_config['sign_type']), "format" => $this->format, "v" => $this->v, "req_id" => $this->req_id, "req_data" => $req_data, "_input_charset" => trim(strtolower($this->alipay_config['input_charset'])) ); //建立请求 $alipaySubmit = new AlipaySubmit($this->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 = '' . $request_token . ''; //必填 //构造要请求的参数数组,无需改动 $parameter = array( "service" => "alipay.wap.auth.authAndExecute", "partner" => trim($this->alipay_config['partner']), "sec_id" => trim($this->alipay_config['sign_type']), "format" => $this->format, "v" => $this->v, "req_id" => $this->req_id, "req_data" => $req_data, "_input_charset" => trim(strtolower($this->alipay_config['input_charset'])) ); //建立请求 $alipaySubmit = new AlipaySubmit($this->alipay_config); $html_text = $alipaySubmit->buildRequestForm($parameter, 'get', '正在跳转支付页面...'); return ' 支付宝即时到账交易接口接口 '.$html_text.' '; } /** * 获取return信息 */ public function getReturnInfo($payment_config) { $verify = $this->_verify('return', $payment_config); if($verify) { return array( //商户订单号 'out_trade_no' => $_GET['out_trade_no'], //支付宝交易号 'trade_no' => $_GET['trade_no'], ); } return false; } /** * 获取notify信息 */ public function getNotifyInfo($payment_config) { $verify = $this->_verify('notify', $payment_config); if($verify) { $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) ) { //商户订单号 $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' || $trade_status == 'TRADE_SUCCESS') { return array( //商户订单号 'out_trade_no' => $out_trade_no, //支付宝交易号 'trade_no' => $trade_no, ); } } } return false; } /** * 验证返回信息 */ private function _verify($type, $payment_config) { if(empty($payment_config)) { return false; } $alipay_config = array( 'partner' => $payment_config['alipay_partner'], 'key' => $payment_config['alipay_key'], 'private_key_path' => 'key/rsa_private_key.pem', 'ali_public_key_path' => 'key/alipay_public_key.pem', 'sign_type' => 'MD5', 'input_charset' => 'utf-8', 'cacert' => getcwd().'\\cacert.pem', 'transport' => 'http' ); require_once(BASE_PATH.DS.'api/payment/alipay/lib/alipay_notify.class.php'); //计算得出通知验证结果 $alipayNotify = new AlipayNotify($alipay_config); switch ($type) { case 'notify': $verify_result = $alipayNotify->verifyNotify(); break; case 'return': $verify_result = $alipayNotify->verifyReturn(); break; default: $verify_result = false; break; } return $verify_result; } }