Symfony网校edusoho二次开发paypal支付功能开发-附代码

插件测试站 http://all.zkdygl.com/course/20

<?php

namespace Codeages\Biz\Pay\Payment;

use Codeages\Biz\Framework\Service\Exception\AccessDeniedException;
use Codeages\Biz\Framework\Service\Exception\InvalidArgumentException;
use Codeages\Biz\Framework\Util\ArrayToolkit;
class PalPayGateway extends AbstractGateway
{


    // protected $url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
    // protected $wapUrl = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
    protected $url = 'https://www.paypal.com/cgi-bin/webscr';
    protected $wapUrl = 'https://www.paypal.com/cgi-bin/webscr';
    protected $isWap = false;
    public function createTrade($data)
    {
        if (!ArrayToolkit::requireds($data, array(
            'goods_title',
            'goods_detail',
            'attach',
            'trade_sn',
            'amount',
            'notify_url',
            'return_url',
            'create_ip',
        ))) {
            throw new InvalidArgumentException('trade args is invalid.');
        }

        $platformType = empty($data['platform_type']) ? 'Web' : $data['platform_type'];

        if ($platformType == 'Wap') {
            $this->url = $this->wapUrl;
            $this->isWap = true;
        }

        $data = $this->convertParams($data);

        return array(
            'url' => "",
            'data' => $data
        );
    }

    private function verified($data){

        $req = 'cmd=_notify-validate';
        if(function_exists('get_magic_quotes_gpc')) $get_magic_quotes_exists = true;
        foreach ($data as $key => $value) {
            if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1){
                $value = urlencode(stripslashes($value));
            }else{
                $value = urlencode($value);
            }
            $req.= "&$key=$value";
        }
        $ch = curl_init($this->url);
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
        $res = curl_exec($ch);

        if (strcmp ($res, "VERIFIED") == 0) {
            return true;
        } else if (strcmp ($res, "INVALID") == 0) {
            return false;
        }
    }
    public function converterNotify($data)
    {
        $res = $this->verified($data);
        if (!$res) {
            return array(
                array(
                    'status' => 'failture',
                    'notify_data' => $data,
                ),
                'fail'
            );
        }
       if ($data['payment_status'] == 'Completed') {
           return array(array(
               'status' => 'paid',
               'cash_flow' => $data['payer_id'],
               'paid_time' => time(),
               'pay_amount' => (int)($data['payment_gross'] * 100),
               'cash_type' => 'USD',
               'trade_sn' => $data['invoice'],
               'attach' => array(),
               'notify_data' => $data,
           ),
               json_encode(array(
                   'ret_code' => '0000',
                   'ret_msg' => '交易成功'
               ))
           );
       }
        return array(
            array(
                'status' => 'failture',
                'notify_data' => $data,
            ),
            'fail'
        );
    }

    public function applyRefund($data)
    {
        throw new AccessDeniedException('can not apply refund with lianlianpay.');
    }

    public function queryTrade($tradeSn)
    {
        return null;
    }

    public function converterRefundNotify($data)
    {
        throw new AccessDeniedException('can not convert refund notify with Palpay.');
    }

    protected function signParams($params, $options)
    {
        return $this->getSetting();
      //  return $setting['signatureToolkit']->signParams($params, $options);
    }
    protected function makeForm($params){
        $setting = $this->getSetting();
        $formHtml = '<form style="text-align:center;" id="form1" name="form1" action="'.$this->url.'" method="post" class="paypal">' .

        "<input type='hidden' name='cmd' value='_xclick'>" .//告诉paypal该表单是立即购买

        "<input type='hidden' name='business' value='".$setting['account']."'>" .//卖家帐号 也就是收钱的帐号

        "<input type='hidden' name='item_name' value='".$params['name_goods']."'>" .//商品名称 item_number

        "<input type='hidden' name='item_number' value='1'>" .//物品号 item_number

        "<input type='hidden' name='amount' value='".$params['money_order']."'>" .// 订单金额

        "<input type='hidden' name='currency_code' value='USD'>" .// 货币

        "<input type='hidden' name='return' value='".$params['url_return']."'>" .// 支付成功后网页跳转地址
        "<input type='hidden' name='return' value='".$params['url_return']."'>" .// 支付成功后网页跳转地址
        "<input type='hidden' name='notify_url' value='".$params['notify_url']."'>" .//支付成功后paypal后台发送订单通知地址

        "<input type='hidden' name='cancel_return' value='".$params['url_return']."'>" .//用户取消交易返回地址

        "<input type='hidden' name='invoice' value='".$params['no_order'] ."'>" .//自定义订单号

        "<input type='hidden' name='charset' value='utf-8'>" .// 字符集

        "<input type='hidden' name='no_shipping' value='1'>" .// 不要求客户提供收货地址

        "<input type='hidden' name='no_note' value=''>" .// 付款说明

        "<input type='hidden' name='rm' value='2'>" .


       "</form><script type='text/javascript'>function load_submit(){document.form1.submit()}load_submit();</script>";
        return $formHtml;

    }
    protected function convertParams($params)
    {
        $setting = $this->getSetting();
        $converted                 = array();
        $converted['busi_partner'] = '101001';
        $converted['dt_order']     = date('YmdHis', time());
        $converted['money_order']  = round($params['amount']/100/7.0755,2);
        $converted['name_goods']   = $this->filterText($params['goods_title']);
        $converted['no_order']     = $params['trade_sn'];
        if (!empty($params['notify_url'])) {
            $converted['notify_url'] = $params['notify_url'];
        }
        $converted['sign_type']    = 'RSA';
        $converted['version']      = '1.0';

        $converted['oid_partner']  = $setting['oid_partner'];
        $converted['user_id']      = $params['attach']['identify_user_id'];

        $converted['timestamp']    = date('YmdHis', time());
        if (!empty($params['return_url'])) {
            $converted['url_return'] = $params['return_url']."?sn=".$_POST['orderSn'];
        }
        if (empty($params['attach']['bindPhone'])) {
            $params['attach']['bindPhone'] = '';
        }
        $converted['risk_item']  = json_encode(array(
            'frms_ware_category'=>1008,
            'user_info_mercht_userno'=>$params['attach']['identify_user_id'],
            'user_info_dt_register'=>date('YmdHis', $params['attach']['user_created_time']),
            'user_info_bind_phone' => $params['attach']['bindPhone']
        ));

        $converted['userreq_ip'] = str_replace(".", "_", $params['create_ip']);
        $converted['bank_code']  = '';
        $converted['pay_type']   = '3';
        $converted['sign']       = $this->signParams($converted, $setting);
        $converted['formHtml']       = $this->makeForm($converted);
        return $converted;

    }

    protected function convertMobileParams($converted)
    {
        unset($converted['userreq_ip'], $converted['bank_code'], $converted['pay_type'], $converted['timestamp'], $converted['version'], $converted['sign']);
        $converted['version'] = '1.2';
        $converted['app_request'] = 3;
        $converted['sign'] = $this->signParams($converted, $this->getSetting());
        return array('req_data'=>json_encode($converted));
    }

    protected function filterText($text)
    {
        preg_match_all('/[\x{4e00}-\x{9fa5}A-Za-z0-9.]*/iu', $text, $results);
        $title = '';
        if ($results) {
            foreach ($results[0] as $result) {
                if (!empty($result)) {
                    $title .= $result;
                }
            }
        }

        return $title;
    }

    protected function getSetting()
    {
        $config = $this->biz['payment.platforms']['palpay'];
        return array(
            'id' => $config['id'],
            'secret' => $config['secret'],
            'account' => $config['account'],
        );
    }
}

点击购买该课程可以进行测试效果

1、edusoho新版后台的界面,配置PayPal支付参数信息,主要还是商户邮箱
在这里插入图片描述
2、配置完之后,在前台测试课程购买的支付过程
在这里插入图片描述
3、选择PayPal支付订单,直接跳转到PayPal支付的页面!!!!!
在这里插入图片描述
4、支付完之后,就会进行回调,系统显示支付成功
在这里插入图片描述

EduSoho开源网校平台系统源码是一套PHP版开源网校代码建站系统,而且免费提供给非商业用途的用户使用。EduSoho开源网校平台系统所在的阔知网络是一家专注在线教育平台系统研发与教育运营服务的互联网企业,其研发的开源网校系统提供了基础的功能,包括直播、录播、考试题库等多项功能,用户可以实现根据不同的用户给予不同的权限,观看第三方的视频内容,需要的用户可以下载安装使用,体验一下EduSoho开源网校系统的各项功能Edusoho开源网校系统功能特点 1、独创学习引擎,打造互动式课堂 EduSoho独创的学习引擎,开发了一对一直播、大班直播、点播课程、音频课程、作业、考试等12种教学手段,让教育机构按需打造个性化的教学模式。 2、题库系统,智能化开展考试测评 EduSoho独立研发的在线题库平台是针对试题管理、智能组卷、在线做题、课后作业、模拟考试的需求所提供的整体的解决方案。 3、移动端学习,把学校装进口袋 配套阔知学堂APP、专为微信端优化的微网校和小程序,满足学员碎片化学习需求,随时随地在线学习。 4、云视频 专为在线教育研发的视频技术-TLP2.0专利技术,加密传输,动态解密播放,实现了盗版溯源等。 5、微信营销平台,实现网校快速引流 微营销工具、微网校和小程序,无缝对接网校微信公众号和社群,打造网校微信运营生态,轻松实现快速引流。 6、智能营销系统,招生转化率翻倍 从定位目标客户到促销成交,多种工具帮助网校打通招生转化路径,从招生到课程营销,营收增长80%。 7、网校管理ERP,让你轻松掌握运营管理 可视化图表结合面板式管理后台,让网校的管理轻松高效。 EduSoho开源网校平台系统源码截图 相关阅读 在线教育,如何选择合适的视频“云”服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linlinlove2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值