本文實(shí)例講述了Ecshop實(shí)現(xiàn)的支付寶手機(jī)網(wǎng)頁(yè)支付功能。分享給大家供大家參考,具體如下:
Ecshop手機(jī)網(wǎng)頁(yè)版本支持在網(wǎng)上找了很多需要花錢購(gòu)買了,在這里小編整理了一個(gè)Ecshop 支付寶手機(jī)網(wǎng)頁(yè)支付免費(fèi)版供大家參考.
Ecshop 支付寶手機(jī)網(wǎng)頁(yè)支付,針對(duì)ecshop wap手機(jī)版
代碼如下:
/**
* ECSHOP 支付寶手機(jī)網(wǎng)頁(yè)插件
*/
if (!defined('IN_ECS'))
{
die('Hacking attempt');
}
$payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/alipay_wap.php';
if (file_exists($payment_lang))
{
global $_LANG;
include_once($payment_lang);
}
/* 模塊的基本信息 */
if (isset($set_modules) && $set_modules == TRUE)
{
$i = isset($modules) ? count($modules) : 0;
/* 代碼 */
$modules[$i]['code'] = basename(__FILE__, '.php');
/* 描述對(duì)應(yīng)的語(yǔ)言項(xiàng) */
$modules[$i]['desc'] = 'alipay_wap_desc';
/* 是否支持貨到付款 */
$modules[$i]['is_cod'] = '0';
/* 是否支持在線支付 */
$modules[$i]['is_online'] = '1';
/* 作者 */
$modules[$i]['author'] = 'ECSHOP TEAM';
/* 網(wǎng)址 */
$modules[$i]['website'] = 'http://www.alipay.com';
/* 版本號(hào) */
$modules[$i]['version'] = '1.0.2';
/* 配置信息 共用?? */
$modules[$i]['config'] = array(
array('name' => 'alipay_account', 'type' => 'text', 'value' => ''),
array('name' => 'alipay_key', 'type' => 'text', 'value' => ''),
array('name' => 'alipay_partner', 'type' => 'text', 'value' => ''),
array('name' => 'alipay_pay_method', 'type' => 'select', 'value' => '')
);
return;
}
/**
* 類
*/
class alipay_wap
{
/**
* 構(gòu)造函數(shù)
*
* @access public
* @param
*
* @return void
*/
function alipay()
{
}
function __construct()
{
$this->alipay();
}
/**
* 生成支付代碼
* @param array $order 訂單信息
* @param array $payment 支付方式信息
*/
function get_code($order, $payment)
{
if (!defined('EC_CHARSET'))
{
$charset = 'utf-8';
}
else
{
$charset = EC_CHARSET;
}
//合作身份者id,以2088開頭的16位純數(shù)字
$alipay_config['partner'] = $payment['alipay_partner'];
//簽名方式 不需修改
$alipay_config['sign_type'] = '0001';
//安全檢驗(yàn)碼,以數(shù)字和字母組成的32位字符
//如果簽名方式設(shè)置為“MD5”時(shí),請(qǐng)?jiān)O(shè)置該參數(shù)
//$alipay_config['key'] = $payment['alipay_key'];
//商戶的私鑰(后綴是.pen)文件相對(duì)路徑
//如果簽名方式設(shè)置為“0001”時(shí),請(qǐng)?jiān)O(shè)置該參數(shù)
$alipay_config['private_key_path'] = dirname(__FILE__)."/alipay_wap/key/rsa_private_key.pem";
//支付寶公鑰(后綴是.pen)文件相對(duì)路徑
//如果簽名方式設(shè)置為“0001”時(shí),請(qǐng)?jiān)O(shè)置該參數(shù)
$alipay_config['ali_public_key_path']= dirname(__FILE__)."/alipay_wap/key/alipay_public_key.pem";
//↑↑↑↑↑↑↑↑↑↑請(qǐng)?jiān)谶@里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
//字符編碼格式 目前支持 gbk 或 utf-8
$alipay_config['input_charset']= 'utf-8';
//ca證書路徑地址,用于curl中ssl校驗(yàn)
//請(qǐng)保證cacert.pem文件在當(dāng)前文件夾目錄中
$alipay_config['cacert'] = dirname(__FILE__)."/alipay_wap/cacert.pem";
//訪問模式,根據(jù)自己的服務(wù)器是否支持ssl訪問,若支持請(qǐng)選擇https;若不支持請(qǐng)選擇http
$alipay_config['transport'] = 'http';
require_once(dirname(__FILE__)."/alipay_wap/lib/alipay_submit.class.php");
//返回格式
$format = "xml";
//必填,不需要修改
//返回格式
$v = "2.0";
//必填,不需要修改
//請(qǐng)求號(hào)
$req_id = date('Ymdhis');
//必填,須保證每次請(qǐng)求都是唯一
//**req_data詳細(xì)信息**
//服務(wù)器異步通知頁(yè)面路徑
$notify_url = return_url(basename(__FILE__, '.php'));
//需http://格式的完整路徑,不允許加?id=123這類自定義參數(shù)
//頁(yè)面跳轉(zhuǎn)同步通知頁(yè)面路徑
$call_back_url = return_url(basename(__FILE__, '.php'));
//需http://格式的完整路徑,不允許加?id=123這類自定義參數(shù)
//操作中斷返回地址
$merchant_url = $GLOBALS['ecs']->url();
//用戶付款中途退出返回商戶的地址。需http://格式的完整路徑,不允許加?id=123這類自定義參數(shù)
//賣家支付寶帳戶
$seller_email = $payment['alipay_account'];
//必填
//商戶訂單號(hào)
$out_trade_no = $order['order_sn'] . $order['log_id'];
//商戶網(wǎng)站訂單系統(tǒng)中唯一訂單號(hào),必填
//訂單名稱
$subject = $order['order_sn'];
//必填
//付款金額
$total_fee = $order['order_amount'];
//必填
//請(qǐng)求業(yè)務(wù)參數(shù)詳細(xì)
$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>';
//必填
/************************************************************/
//構(gòu)造要請(qǐng)求的參數(shù)數(shù)組,無(wú)需改動(dòng)
$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']))
);
//建立請(qǐng)求
$alipaySubmit = new AlipaySubmit($alipay_config);
$html_text = $alipaySubmit->buildRequestHttp($para_token);
//URLDECODE返回的信息
$html_text = urldecode($html_text);
//解析遠(yuǎn)程模擬提交后返回的信息
$para_html_text = $alipaySubmit->parseResponse($html_text);
//獲取request_token
$request_token = $para_html_text['request_token'];
/**************************根據(jù)授權(quán)碼token調(diào)用交易接口alipay.wap.auth.authAndExecute**************************/
//業(yè)務(wù)詳細(xì)
$req_data = '<auth_and_execute_req><request_token>' . $request_token . '</request_token></auth_and_execute_req>';
//必填
//構(gòu)造要請(qǐng)求的參數(shù)數(shù)組,無(wú)需改動(dòng)
$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']))
);
//建立請(qǐng)求
$alipaySubmit = new AlipaySubmit($alipay_config);
$html_text = $alipaySubmit->buildRequestForm($parameter, 'get', '進(jìn)行付款');
return $html_text;
}
/**
* 響應(yīng)操作
*/
function respond()
{
if (!emptyempty($_POST))
{
foreach($_POST as $key => $data)
{
$_GET[$key] = $data;
}
}
log_write($_GET, 'alipay_wap');
$payment = get_payment($_GET['code']);
$seller_email = rawurldecode($_GET['seller_email']);
$order_sn = str_replace($_GET['subject'], '', $_GET['out_trade_no']);
$order_sn = trim($order_sn);
/* 檢查數(shù)字簽名是否正確 */
ksort($_GET);
reset($_GET);
//合作身份者id,以2088開頭的16位純數(shù)字
$alipay_config['partner'] = $payment['alipay_partner'];
//簽名方式 不需修改
$alipay_config['sign_type'] = '0001';
//安全檢驗(yàn)碼,以數(shù)字和字母組成的32位字符
//如果簽名方式設(shè)置為“MD5”時(shí),請(qǐng)?jiān)O(shè)置該參數(shù)
//$alipay_config['key'] = $payment['alipay_key'];
//商戶的私鑰(后綴是.pen)文件相對(duì)路徑
//如果簽名方式設(shè)置為“0001”時(shí),請(qǐng)?jiān)O(shè)置該參數(shù)
$alipay_config['private_key_path'] = dirname(__FILE__)."/alipay_wap/key/rsa_private_key.pem";
//支付寶公鑰(后綴是.pen)文件相對(duì)路徑
//如果簽名方式設(shè)置為“0001”時(shí),請(qǐng)?jiān)O(shè)置該參數(shù)
$alipay_config['ali_public_key_path']= dirname(__FILE__)."/alipay_wap/key/alipay_public_key.pem";
//↑↑↑↑↑↑↑↑↑↑請(qǐng)?jiān)谶@里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
//字符編碼格式 目前支持 gbk 或 utf-8
$alipay_config['input_charset']= 'utf-8';
//ca證書路徑地址,用于curl中ssl校驗(yàn)
//請(qǐng)保證cacert.pem文件在當(dāng)前文件夾目錄中
$alipay_config['cacert'] = dirname(__FILE__)."/alipay_wap/cacert.pem";
//訪問模式,根據(jù)自己的服務(wù)器是否支持ssl訪問,若支持請(qǐng)選擇https;若不支持請(qǐng)選擇http
$alipay_config['transport'] = 'http';
require_once(dirname(__FILE__)."/alipay_wap/lib/alipay_notify.class.php");
//計(jì)算得出通知驗(yàn)證結(jié)果
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
if(!$verify_result) {//驗(yàn)證不成功
return false;
}
$notify_data = $alipayNotify->decrypt($_GET['notify_data']);
$doc = new DOMDocument();
$doc->loadXML($notify_data);
if( ! emptyempty($doc->getElementsByTagName( "notify" )->item(0)->nodeValue) ) {
//商戶訂單號(hào)
$out_trade_no = $doc->getElementsByTagName( "out_trade_no" )->item(0)->nodeValue;
$out_trade_no = str_replace($_GET['subject'], '', $out_trade_no);
$out_trade_no = trim($out_trade_no);
//支付寶交易號(hào)
$trade_no = $doc->getElementsByTagName( "trade_no" )->item(0)->nodeValue;
//交易狀態(tài)
$trade_status = $doc->getElementsByTagName( "trade_status" )->item(0)->nodeValue;
/* 檢查支付的金額是否相符 */
if (!check_money($out_trade_no, $_GET['total_fee']))
{
return false;
}
if($_GET['trade_status'] == 'TRADE_FINISHED') {
/* 改變訂單狀態(tài) */
order_paid($out_trade_no);
return true;
}else if ($_GET['trade_status'] == 'TRADE_SUCCESS') {
/* 改變訂單狀態(tài) */
order_paid($out_trade_no, 2);
return true;
}else{
return false;
}
}
}
}
?>
希望本文所述對(duì)大家Ecshop開發(fā)有所幫助。