simplephp/payment

this payment bundle for symfony2

dev-master 2016-04-27 16:01 UTC

This package is auto-updated.

Last update: 2024-04-28 23:26:14 UTC


README

PaymentBundle for symfony2

PHP界的小学生写的 payment 支付组件基于Symfony2,只是简单封装而已、可扩展,欢迎大家拍砖,有不懂的可以联系我。 邮箱:841694874@qq.com QQ :841694874 微信技术交流: king-1974

Installation

1 Add to composer.json to the require key

    "require" : {
        "simplephp/payment": "dev-master",
    }

OR

    composer require simplephp/payment dev-master

2 Register the bundle in app/AppKernel.php

    $bundles = array(
        // ...
         new simplephp\payment\PaymentBundle(),
    );

How to used? Just Three steps

  • First! get service:
$payment = $this->get('payment')->get('alipay');
#alipay is pay method
  • Second! configuration parameters in your your yml(app\config\config.yml) like this:
# payment Configuration
payment:
    alipay:
        partner: ***************
        key: ***************
    payease:
        security_code: ***************
        mid: ***************
    paypal:
        client_id: ***************
        secret: ***************
  • Third! generate order and configuration parameters:
$order_no = date('ymdhis').substr(microtime(),2,4);
$option = [
    'order_no' => $order_no,//  订单ID
    'subject' => '测试充值主题',  //  订单标题
    'body' => '测试充值具体内容',  //  订单内容
    'money' => '0.01',      //  money
    'notify_url' => $this->generateUrl('alipaynotify', [], 0),  //支付宝同步调用地址
    'return_url' => $this->generateUrl('alipayreturn', [], 0),  //支付宝异步调用地址
];
echo $payment->pay($option);
  • In our Controller:
/**
 * @Route("/", name="homepage")
 */
public function indexAction(Request $request)
{
    $payment = $this->get('payment')->get('alipay');
    $order_no = date('ymdhis').substr(microtime(),2,4);
    $option = [
        'order_no' => $order_no,//  订单ID
        'subject' => '测试充值主题',  //  订单标题
        'body' => '测试充值具体内容',  //  订单内容
        'money' => '0.01',      //  money
        'notify_url' => $this->generateUrl('alipaynotify', [], 0),  //支付宝同步调用地址
        'return_url' => $this->generateUrl('alipayreturn', [], 0),  //支付宝异步调用地址
    ];
    echo $payment->pay($option);
    return $this->render('default/index.html.twig', [
        'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..'),
    ]);
}
  • Handle their own business logic:
    /**
     * @Route("/alipayreturn", name="alipayreturn")
     */
    public function alipayreturnAction(Request $request) {
        $payment = $this->get('payment')->get('alipay');
        $verify_result = $payment->verifyReturn();

        if($verify_result) {//验证成功
            //请在这里加上商户的业务逻辑程序代码

            //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
            //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表

            //商户订单号
            $out_trade_no = $request->get('out_trade_no');

            //支付宝交易号
            $trade_no = $request->get('trade_no');

            //交易状态
            $trade_status = $request->get('trade_status');

            if($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                //如果有做过处理,不执行商户的业务程序
            } else {
                echo "trade_status=".$trade_status;
            }

            echo "验证成功<br />";

            //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

        } else {
            //验证失败
            //如要调试,请看alipay_notify.php页面的verifyReturn函数
            echo "验证失败";
        }
        return $this->render('default/index.html.twig', [
            'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..'),
        ]);
    }

    /**
     * @Route("/alipaynotify", name="alipaynotify")
     */
    public function alipaynotifyAction(Request $request) {
        $payment = $this->get('payment')->get('alipay');
        $verify_result = $payment->verifyNotify();
        if($verify_result) {
            ### 业务逻辑处理
            //商户订单号
            $out_trade_no = $request->request->get('out_trade_no');

            //支付宝交易号
            $trade_no =  $request->request->get('trade_no');

            //交易状态
            $trade_status =  $request->request->get('trade_status');

            if($_POST['trade_status'] == 'TRADE_FINISHED') {
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                //如果有做过处理,不执行商户的业务程序

                //注意:
                //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知

                //调试用,写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
            } else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                //如果有做过处理,不执行商户的业务程序

                //注意:
                //付款完成后,支付宝系统发送该交易状态通知

                //调试用,写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
            }

            //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

            echo "success";		//请不要修改或删除

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        } else {
            //验证失败
            echo "fail";

            //调试用,写文本函数记录程序运行情况是否正常
            //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
        }
        return $this->render('default/index.html.twig', [
            'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..'),
        ]);
    }