本文实例讲述了Ecshop实现的支付宝手机网页支付功能。分享给大家供大家参考,具体如下:
Ecshop手机网页版本支持在网上找了很多需要花钱购买了,在这里小编整理了一个Ecshop 支付宝手机网页支付免费版供大家参考.
Ecshop 支付宝手机网页支付,针对ecshop wap手机版
代码如下:
'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{/*** 构造函数** @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位纯数字$alipay_config['partner'] = $payment['alipay_partner'];//签名方式 不需修改$alipay_config['sign_type'] = '0001';//安全检验码,以数字和字母组成的32位字符//如果签名方式设置为“MD5”时,请设置该参数//$alipay_config['key'] = $payment['alipay_key'];//商户的私钥(后缀是.pen)文件相对路径//如果签名方式设置为“0001”时,请设置该参数$alipay_config['private_key_path'] = dirname(__FILE__)."/alipay_wap/key/rsa_private_key.pem";//支付宝公钥(后缀是.pen)文件相对路径//如果签名方式设置为“0001”时,请设置该参数$alipay_config['ali_public_key_path']= dirname(__FILE__)."/alipay_wap/key/alipay_public_key.pem";//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//字符编码格式 目前支持 gbk 或 utf-8$alipay_config['input_charset']= 'utf-8';//ca证书路径地址,用于curl中ssl校验//请保证cacert.pem文件在当前文件夹目录中$alipay_config['cacert'] = dirname(__FILE__)."/alipay_wap/cacert.pem";//访问
模式,根据自己的服务器是否支持ssl访问,若支持请选择
HTTPs;若不支持请选择http$alipay_config['transport'] = 'http';require_once(dirname(__FILE__)."/alipay_wap/lib/alipay_sub
MIT.class.php");//返回格式$format = "xml";//必填,不需要修改//返回格式$v = "2.0";//必填,不需要修改//请求号$req_id = date('Ymdhis');//必填,须保证每次请求都是唯一//**req_data详细信息**//服务器异步通知页面路径$notify_url = return_url(basename(__FILE__, '.php'));//需 http:// 格式的完整路径,不允许加?id=123这类自定义参数//页面跳转
同步通知页面路径$call_back_url = return_url(basename(__FILE__, '.php'));//需 http:// 格式的完整路径,不允许加?id=123这类自定义参数//操作中断返回地址$merchant_url = $GLOBALS['ecs']->url();//用户付款中途退出返回商户的地址。需 http:// 格式的完整路径,不允许加?id=123这类自定义参数//卖家支付宝帐户$seller_email = $payment['alipay_account'];//必填//商户订单号$out_trade_no = $order['order_sn'] . $order['log_id'];//商户网站订单系统中唯一订单号,必填//订单名称$subject = $order['order_sn'];//必填//付款金额$total_fee = $order['order_amount'];//必填//请求业务参数详细$req_data = '
' . $notify_url . '' . $call_back_url . '' . $seller_email . '' . $out_trade_no . '' . $subject . '' . $total_fee . '' . $merchant_url . '';//必填/************************************************************///构造要请求的参数数组,无需改动$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'])));//建立请求$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 = '
' . $request_token . '';//必填//构造要请求的参数数组,无需改动$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', '进行付款');return $html_text;}/*** 响应操作*/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);/* 检查数字签名是否正确 */ksort($_GET);reset($_GET);//合作身份者id,以2088开头的16位纯数字$alipay_config['partner'] = $payment['alipay_partner'];//签名方式 不需修改$alipay_config['sign_type'] = '0001';//安全检验码,以数字和字母组成的32位字符//如果签名方式设置为“MD5”时,请设置该参数//$alipay_config['key'] = $payment['alipay_key'];//商户的私钥(后缀是.pen)文件相对路径//如果签名方式设置为“0001”时,请设置该参数$alipay_config['private_key_path'] = dirname(__FILE__)."/alipay_wap/key/rsa_private_key.pem";//支付宝公钥(后缀是.pen)文件相对路径//如果签名方式设置为“0001”时,请设置该参数$alipay_config['ali_public_key_path']= dirname(__FILE__)."/alipay_wap/key/alipay_public_key.pem";//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//字符编码格式 目前支持 gbk 或 utf-8$alipay_config['input_charset']= 'utf-8';//ca证书路径地址,用于curl中ssl校验//请保证cacert.pem文件在当前文件夹目录中$alipay_config['cacert'] = dirname(__FILE__)."/alipay_wap/cacert.pem";//访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http$alipay_config['transport'] = 'http';require_once(dirname(__FILE__)."/alipay_wap/lib/alipay_notify.class.php");//计算得出通知验证结果$alipayNotify = new AlipayNotify($alipay_config);$verify_result = $alipayNotify->verifyNotify();if(!$verify_result) {//验证
不成功return false;}$notify_data = $alipayNotify->decrypt($_GET['notify_data']);$doc = new DOMDocument();$doc->loadXML($notify_data);if( ! emptyempty($doc->getElementsByTagName( "notify" )->item(0)->nodeValue) ) {//商户订单号$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);//支付宝交易号$trade_no = $doc->getElementsByTagName( "trade_no" )->item(0)->nodeValue;//交易状态$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') {/* 改变订单状态 */order_paid($out_trade_no);return true;}else if ($_GET['trade_status'] == 'TRADE_SUCCESS') {/* 改变订单状态 */order_paid($out_trade_no, 2);return true;}else{return false;}}}}?>
希望本文所述对大家Ecshop开发有所帮助。
发表评论