儒儒 發表於 2023-5-30 00:00:00

Ecshop实现的支付宝手机网页支付功能免费版示例

<p>
本文实例讲述了Ecshop实现的支付宝手机网页支付功能。分享给大家供大家参考,具体如下:</p>
<p>
Ecshop手机网页版本支持在网上找了很多需要花钱购买了,在这里小编整理了一个Ecshop 支付宝手机网页支付免费版供大家参考.</p>
<p>
Ecshop 支付宝手机网页支付,针对ecshop wap手机版<br>
 </p>
<div>

<p>
代码如下:</p>
</div>
<div id="phpcode7">
&lt;?php<br>
/**<br>
* ECSHOP 支付宝手机网页插件<br>
*/<br>
if (!defined('IN_ECS'))<br>
{<br>
die('Hacking attempt');<br>
}<br>
$payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/alipay_wap.php';<br>
if (file_exists($payment_lang))<br>
{<br>
global $_LANG;<br>
include_once($payment_lang);<br>
}<br>
/* 模块的基本信息 */<br>
if (isset($set_modules) &amp;&amp; $set_modules == TRUE)<br>
{<br>
$i = isset($modules) ? count($modules) : 0;<br>
/* 代码 */<br>
$modules[$i]['code'] = basename(__FILE__, '.php');<br>
/* 描述对应的语言项 */<br>
$modules[$i]['desc'] = 'alipay_wap_desc';<br>
/* 是否支持货到付款 */<br>
$modules[$i]['is_cod'] = '0';<br>
/* 是否支持在线支付 */<br>
$modules[$i]['is_online'] = '1';<br>
/* 作者 */<br>
$modules[$i]['author'] = 'ECSHOP TEAM';<br>
/* 网址 */<br>
$modules[$i]['website'] = 'http://www.alipay.com';<br>
/* 版本号 */<br>
$modules[$i]['version'] = '1.0.2';<br>
/* 配置信息 共用?? */<br>
$modules[$i]['config'] = array(<br>
array('name' =&gt; 'alipay_account', 'type' =&gt; 'text', 'value' =&gt; ''),<br>
array('name' =&gt; 'alipay_key', 'type' =&gt; 'text', 'value' =&gt; ''),<br>
array('name' =&gt; 'alipay_partner', 'type' =&gt; 'text', 'value' =&gt; ''),<br>
array('name' =&gt; 'alipay_pay_method', 'type' =&gt; 'select', 'value' =&gt; '')<br>
);<br>
return;<br>
}<br>
/**<br>
* 类<br>
*/<br>
class alipay_wap<br>
{<br>
/**<br>
* 构造函数<br>
*<br>
* @access public<br>
* @param<br>
*<br>
* @return void<br>
*/<br>
function alipay()<br>
{<br>
}<br>
function __construct()<br>
{<br>
$this-&gt;alipay();<br>
}<br>
/**<br>
* 生成支付代码<br>
* @param array $order 订单信息<br>
* @param array $payment 支付方式信息<br>
*/<br>
function get_code($order, $payment)<br>
{<br>
if (!defined('EC_CHARSET'))<br>
{<br>
$charset = 'utf-8';<br>
}<br>
else<br>
{<br>
$charset = EC_CHARSET;<br>
}<br>
//合作身份者id,以2088开头的16位纯数字<br>
$alipay_config['partner'] = $payment['alipay_partner'];<br>
//签名方式 不需修改<br>
$alipay_config['sign_type'] = '0001';<br>
//安全检验码,以数字和字母组成的32位字符<br>
//如果签名方式设置为“MD5”时,请设置该参数<br>
//$alipay_config['key'] = $payment['alipay_key'];<br>
//商户的私钥(后缀是.pen)文件相对路径<br>
//如果签名方式设置为“0001”时,请设置该参数<br>
$alipay_config['private_key_path'] = dirname(__FILE__)."/alipay_wap/key/rsa_private_key.pem";<br>
//支付宝公钥(后缀是.pen)文件相对路径<br>
//如果签名方式设置为“0001”时,请设置该参数<br>
$alipay_config['ali_public_key_path']= dirname(__FILE__)."/alipay_wap/key/alipay_public_key.pem";<br>
//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑<br>
//字符编码格式 目前支持 gbk 或 utf-8<br>
$alipay_config['input_charset']= 'utf-8';<br>
//ca证书路径地址,用于curl中ssl校验<br>
//请保证cacert.pem文件在当前文件夹目录中<br>
$alipay_config['cacert'] = dirname(__FILE__)."/alipay_wap/cacert.pem";<br>
//访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http<br>
$alipay_config['transport'] = 'http';<br>
require_once(dirname(__FILE__)."/alipay_wap/lib/alipay_submit.class.php");<br>
//返回格式<br>
$format = "xml";<br>
//必填,不需要修改<br>
//返回格式<br>
$v = "2.0";<br>
//必填,不需要修改<br>
//请求号<br>
$req_id = date('Ymdhis');<br>
//必填,须保证每次请求都是唯一<br>
//**req_data详细信息**<br>
//服务器异步通知页面路径<br>
$notify_url = return_url(basename(__FILE__, '.php'));<br>
//需http://格式的完整路径,不允许加?id=123这类自定义参数<br>
//页面跳转同步通知页面路径<br>
$call_back_url = return_url(basename(__FILE__, '.php'));<br>
//需http://格式的完整路径,不允许加?id=123这类自定义参数<br>
//操作中断返回地址<br>
$merchant_url = $GLOBALS['ecs']-&gt;url();<br>
//用户付款中途退出返回商户的地址。需http://格式的完整路径,不允许加?id=123这类自定义参数<br>
//卖家支付宝帐户<br>
$seller_email = $payment['alipay_account'];<br>
//必填<br>
//商户订单号<br>
$out_trade_no = $order['order_sn'] . $order['log_id'];<br>
//商户网站订单系统中唯一订单号,必填<br>
//订单名称<br>
$subject = $order['order_sn'];<br>
//必填<br>
//付款金额<br>
$total_fee = $order['order_amount'];<br>
//必填<br>
//请求业务参数详细<br>
$req_data = '&lt;direct_trade_create_req&gt;&lt;notify_url&gt;' . $notify_url . '&lt;/notify_url&gt;&lt;call_back_url&gt;' . $call_back_url . '&lt;/call_back_url&gt;&lt;seller_account_name&gt;' . $seller_email . '&lt;/seller_account_name&gt;&lt;out_trade_no&gt;' . $out_trade_no . '&lt;/out_trade_no&gt;&lt;subject&gt;' . $subject . '&lt;/subject&gt;&lt;total_fee&gt;' . $total_fee . '&lt;/total_fee&gt;&lt;merchant_url&gt;' . $merchant_url . '&lt;/merchant_url&gt;&lt;/direct_trade_create_req&gt;';<br>
//必填<br>
/************************************************************/<br>
//构造要请求的参数数组,无需改动<br>
$para_token = array(<br>
"service" =&gt; "alipay.wap.trade.create.direct",<br>
"partner" =&gt; trim($alipay_config['partner']),<br>
"sec_id" =&gt; trim($alipay_config['sign_type']),<br>
"format" =&gt; $format,<br>
"v" =&gt; $v,<br>
"req_id" =&gt; $req_id,<br>
"req_data" =&gt; $req_data,<br>
"_input_charset" =&gt; trim(strtolower($alipay_config['input_charset']))<br>
);<br>
//建立请求<br>
$alipaySubmit = new AlipaySubmit($alipay_config);<br>
$html_text = $alipaySubmit-&gt;buildRequestHttp($para_token);<br>
//URLDECODE返回的信息<br>
$html_text = urldecode($html_text);<br>
//解析远程模拟提交后返回的信息<br>
$para_html_text = $alipaySubmit-&gt;parseResponse($html_text);<br>
//获取request_token<br>
$request_token = $para_html_text['request_token'];<br>
/**************************根据授权码token调用交易接口alipay.wap.auth.authAndExecute**************************/<br>
//业务详细<br>
$req_data = '&lt;auth_and_execute_req&gt;&lt;request_token&gt;' . $request_token . '&lt;/request_token&gt;&lt;/auth_and_execute_req&gt;';<br>
//必填<br>
//构造要请求的参数数组,无需改动<br>
$parameter = array(<br>
"service" =&gt; "alipay.wap.auth.authAndExecute",<br>
"partner" =&gt; trim($alipay_config['partner']),<br>
"sec_id" =&gt; trim($alipay_config['sign_type']),<br>
"format" =&gt; $format,<br>
"v" =&gt; $v,<br>
"req_id" =&gt; $req_id,<br>
"req_data" =&gt; $req_data,<br>
"_input_charset" =&gt; trim(strtolower($alipay_config['input_charset']))<br>
);<br>
//建立请求<br>
$alipaySubmit = new AlipaySubmit($alipay_config);<br>
$html_text = $alipaySubmit-&gt;buildRequestForm($parameter, 'get', '进行付款');<br>
return $html_text;<br>
}<br>
/**<br>
* 响应操作<br>
*/<br>
function respond()<br>
{<br>
if (!emptyempty($_POST))<br>
{<br>
foreach($_POST as $key =&gt; $data)<br>
{<br>
$_GET[$key] = $data;<br>
}<br>
}<br>
log_write($_GET, 'alipay_wap');<br>
$payment = get_payment($_GET['code']);<br>
$seller_email = rawurldecode($_GET['seller_email']);<br>
$order_sn = str_replace($_GET['subject'], '', $_GET['out_trade_no']);<br>
$order_sn = trim($order_sn);<br>
/* 检查数字签名是否正确 */<br>
ksort($_GET);<br>
reset($_GET);<br>
//合作身份者id,以2088开头的16位纯数字<br>
$alipay_config['partner'] = $payment['alipay_partner'];<br>
//签名方式 不需修改<br>
$alipay_config['sign_type'] = '0001';<br>
//安全检验码,以数字和字母组成的32位字符<br>
//如果签名方式设置为“MD5”时,请设置该参数<br>
//$alipay_config['key'] = $payment['alipay_key'];<br>
//商户的私钥(后缀是.pen)文件相对路径<br>
//如果签名方式设置为“0001”时,请设置该参数<br>
$alipay_config['private_key_path'] = dirname(__FILE__)."/alipay_wap/key/rsa_private_key.pem";<br>
//支付宝公钥(后缀是.pen)文件相对路径<br>
//如果签名方式设置为“0001”时,请设置该参数<br>
$alipay_config['ali_public_key_path']= dirname(__FILE__)."/alipay_wap/key/alipay_public_key.pem";<br>
//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑<br>
//字符编码格式 目前支持 gbk 或 utf-8<br>
$alipay_config['input_charset']= 'utf-8';<br>
//ca证书路径地址,用于curl中ssl校验<br>
//请保证cacert.pem文件在当前文件夹目录中<br>
$alipay_config['cacert'] = dirname(__FILE__)."/alipay_wap/cacert.pem";<br>
//访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http<br>
$alipay_config['transport'] = 'http';<br>
require_once(dirname(__FILE__)."/alipay_wap/lib/alipay_notify.class.php");<br>
//计算得出通知验证结果<br>
$alipayNotify = new AlipayNotify($alipay_config);<br>
$verify_result = $alipayNotify-&gt;verifyNotify();<br>
if(!$verify_result) {//验证不成功<br>
return false;<br>
}<br>
$notify_data = $alipayNotify-&gt;decrypt($_GET['notify_data']);<br>
$doc = new DOMDocument();<br>
$doc-&gt;loadXML($notify_data);<br>
if( ! emptyempty($doc-&gt;getElementsByTagName( "notify" )-&gt;item(0)-&gt;nodeValue) ) {<br>
//商户订单号<br>
$out_trade_no = $doc-&gt;getElementsByTagName( "out_trade_no" )-&gt;item(0)-&gt;nodeValue;<br>
$out_trade_no = str_replace($_GET['subject'], '', $out_trade_no);<br>
$out_trade_no = trim($out_trade_no);<br>
//支付宝交易号<br>
$trade_no = $doc-&gt;getElementsByTagName( "trade_no" )-&gt;item(0)-&gt;nodeValue;<br>
//交易状态<br>
$trade_status = $doc-&gt;getElementsByTagName( "trade_status" )-&gt;item(0)-&gt;nodeValue;<br>
/* 检查支付的金额是否相符 */<br>
if (!check_money($out_trade_no, $_GET['total_fee']))<br>
{<br>
return false;<br>
}<br>
if($_GET['trade_status'] == 'TRADE_FINISHED') {<br>
/* 改变订单状态 */<br>
order_paid($out_trade_no);<br>
return true;<br>
}else if ($_GET['trade_status'] == 'TRADE_SUCCESS') {<br>
/* 改变订单状态 */<br>
order_paid($out_trade_no, 2);<br>
return true;<br>
}else{<br>
return false;<br>
}<br>
}<br>
}<br>
}<br>
?&gt;</div>
<p>
 </p>
<p>
希望本文所述对大家Ecshop开发有所帮助。</p>
頁: [1]
查看完整版本: Ecshop实现的支付宝手机网页支付功能免费版示例