simplephp / payment
此支付包适用于symfony2
dev-master
2016-04-27 16:01 UTC
Requires
- php: >=5.3.2
This package is auto-updated.
Last update: 2024-08-29 00:20:31 UTC
README
symfony2的PaymentBundle
这是由PHP界的小学生编写的payment支付组件,基于Symfony2,仅仅是简单封装,可扩展,欢迎大家提出宝贵意见,有不懂的地方可以联系我。邮箱:841694874@qq.com QQ :841694874 微信技术交流: king-1974
安装
1 将以下代码添加到composer.json文件的require键下
"require" : { "simplephp/payment": "dev-master", }
或者
composer require simplephp/payment dev-master
2 在app/AppKernel.php中注册此包
$bundles = array( // ... new simplephp\payment\PaymentBundle(), );
如何使用?只需三步
- 第一步!获取服务
$payment = $this->get('payment')->get('alipay'); #alipay is pay method
- 第二步!在您的yml配置文件中(app\config\config.yml)配置参数,如下所示
# payment Configuration payment: alipay: partner: *************** key: *************** payease: security_code: *************** mid: *************** paypal: client_id: *************** secret: ***************
- 第三步!生成订单和配置参数
$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);
- 在我们的控制器中
/** * @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').'/..'), ]); }
- 处理它们自己的业务逻辑
/** * @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').'/..'), ]); }