您好,欢迎来到菜鸟吧源码网-本站资源仅供学习与参考,禁止用于商业或违法行为!
  • 首 页
  • 下载APP
  • 公告:菜鸟吧APP于2024.9.15正式上线,请首页右上角进入下载,本站资源均来源于互联网及会员投稿发布,所有资源仅供学习参考研究使用,请勿商用或其它非法用途,商用请购买正版,否则产生一切后果由用户自行承担!谢谢!

     

    当前位置:主页 > 站长学堂 > ecshop >
    Ecshop实现的支付宝手机网页支付功能案例
    时间:2019-10-15 14:54 作者:菜鸟哥 浏览:收藏 挑错 打印

    这篇文章主要介绍了Ecshop实现的支付宝手机网页支付功能免费版,结合完整实例形式分析了Ecshop环境下的免费版支付宝手机端完整实现技巧,需要的朋友可以参考下

    本文实例讲述了Ecshop实现的支付宝手机网页支付功能。分享给大家供大家参考,具体如下:

    Ecshop手机网页版本支持在网上找了很多需要花钱购买了,在这里小编整理了一个Ecshop 支付宝手机网页支付免费版供大家参考.

    Ecshop 支付宝手机网页支付,针对ecshop wap手机版

    代码如下:
    <?php
    /**
    * ECSHOP 支付宝手机网页插件
    */
    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');
    /* 描述对应的语言项 */
    $modules[$i]['desc'] = 'alipay_wap_desc';
    /* 是否支持货到付款 */
    $modules[$i]['is_cod'] = '0';
    /* 是否支持在线支付 */
    $modules[$i]['is_online'] = '1';
    /* 作者 */
    $modules[$i]['author'] = 'ECSHOP TEAM';
    /* 网址 */
    $modules[$i]['website'] = 'http://www.alipay.com';
    /* 版本号 */
    $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
    {
    /**
    * 构造函数
    *
    * @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";
    //&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;请在这里配置您的基本信息&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;
    //字符编码格式 目前支持 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_submit.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 = '<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>';
    //必填
    /************************************************************/
    //构造要请求的参数数组,无需改动
    $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 = '<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', '进行付款');
    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";
    //&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;请在这里配置您的基本信息&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;
    //字符编码格式 目前支持 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开发有所帮助。

    郑重声明:
    本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
    我们不承担任何技术及版权问题,且不对任何资源负法律责任。
    如无法下载,联系站长索要。
    如有侵犯您的版权,请给我们来信:cainiaovip8@qq.com,我们尽快处理。

    修改ECSHOP评论表单中的Email为非必填的教程修改ECSHOP评论表单中的Email为非必填
    介绍ecshop中如何添加限时抢购功能介绍ecshop中如何添加限时抢购功能
    ecshop数据库ecs_stats短时间内会变很大的解决方案ecshop数据库ecs_stats短时间内会变很