PHP接入支付宝接口失效流程详解
最近在写个需要简单支付的小项目,用到了支付宝接口,现已完成。把php接入支付宝的流程写在这里供像我一样的小白参考。
1.首先要有一个创建一个应用(选好自己想要的功能,关于支付的功能,貌似都需要签约)
2.下载sdk&dome网址
https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.cbtzbf&treeid=203&articleid=105910&doctype=1
我选择的是md5签名方式,下面红框内就是做好的php demo
- lib文件很重要,是整个接口的核心类文件;
- alipay.config.php是相关参数的配置文件
- alipayapi.php 是支付宝接口入口文件
- notify_url.php 是服务器异步通知页面文件;
- return_url.php 是页面跳转同步通知文件;
3.打开alipay.config.php
4.配置完成后这个小例子就能直接访问了
通过这个例子,我们就能灵活运用了 开发文档:
https://doc.open.alipay.com/docs/doc.htm?treeid=203&articleid=105288&doctype=1
嵌入thinkphp3.2.3 我保留了
重新命名为
分别给这五个文件加上命名空间
这四个文件的命名空间改为
alipay.class.php 有改动
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | ?php namespace extend\alipay; class alipay { public function pay( $alipay_config , $args ){ /**************************请求参数**************************/ //支付类型 $payment_type = "1" ; //必填,不能修改 //服务器异步通知页面路径 $notify_url = $args [ 'notify_url' ]; //需http://格式的完整路径,不能加?id=123这类自定义参数 //页面跳转同步通知页面路径 $return_url = $args [ 'return_url' ]; //需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/ //商户订单号 $out_trade_no = $args [ 'out_trade_no' ]; //商户网站订单系统中唯一订单号,必填 //订单名称 $subject = "测试" ; //必填 //付款金额 $total_fee = $args [ 'total' ]; //必填 //订单描述 $body = "test" ; //需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html //防钓鱼时间戳 $anti_phishing_key = "" ; //若要使用请调用类文件submit中的query_timestamp函数 //客户端的ip地址 $exter_invoke_ip = "" ; //非局域网的外网ip地址,如:221.0.0.1 /************************************************************/ //构造要请求的参数数组,无需改动 $parameter = array ( "service" => "create_direct_pay_by_user" , "partner" => trim( $alipay_config [ 'partner' ]), "seller_id" => trim( $alipay_config [ 'seller_id' ]), "payment_type" => $payment_type , "notify_url" => $notify_url , "return_url" => $return_url , "out_trade_no" => $out_trade_no , "subject" => $subject , "total_fee" => $total_fee , "body" => $body , "show_url" => $show_url , "anti_phishing_key" => $anti_phishing_key , "exter_invoke_ip" => $exter_invoke_ip , "_input_charset" => trim( strtolower ( $alipay_config [ 'input_charset' ])) ); //建立请求 $alipaysubmit = new lib\alipaysubmit( $alipay_config ); $html_text = $alipaysubmit ->buildrequestform( $parameter , "get" , "确认" ); echo $html_text ; } } |
在config.php配置文件里配置参数
然后新建控制器textcontroller.class.php
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | <?php namespace home\controller; use think\controller; use \extend\alipay as alipays; class textcontroller extends controller { public function index(){ $this ->display(); } public function dobuy(){ $out_trade_no = date ( 'ymdhis' ); $baseurl = 'http://' . $_server [ 'http_host' ]; $args = array ( 'out_trade_no' => $out_trade_no , 'notify_url' => $baseurl . '/index.php/home/text/notifyurl.html' , 'return_url' => $baseurl . '/index.php/home/text/returnurl.html' , 'total' => $_post [ 'widtotal_fee' ], ); $s = new alipays\alipay(); $s ->pay(c( 'alipay' ), $args ); } // 同步跳转 public function returnurl(){ $alipay_config = c( 'alipay' ); //计算得出通知验证结果 $alipaynotify = new alipays\lib\alipaynotify( $alipay_config ); $verify_result = $alipaynotify ->verifyreturn(); if ( $verify_result ) { //验证成功 //商户订单号 $out_trade_no = $_get [ 'out_trade_no' ]; //支付宝交易号 $trade_no = $_get [ 'trade_no' ]; //交易状态 $trade_status = $_get [ 'trade_status' ]; if ( $_get [ 'trade_status' ] == 'trade_finished' || $_get [ 'trade_status' ] == 'trade_success' ) { //交易成功 } else { echo "trade_status=" . $_get [ 'trade_status' ]; } echo "验证成功<br />" ; } else { //验证失败 //如要调试,请看alipay_notify.php页面的verifyreturn函数 echo "验证失败" ; } } // 异步跳转 public function notifyurl(){ $alipay_config = c( 'alipay' ); //计算得出通知验证结果 $alipaynotify = new alipays\alipaynotify( $alipay_config ); $verify_result = $alipaynotify ->verifynotify(); if ( $verify_result ) { //验证成功 $out_trade_no = $_post [ 'out_trade_no' ]; //支付宝交易号 $trade_no = $_post [ 'trade_no' ]; //交易状态 $trade_status = $_post [ 'trade_status' ]; if ( $_post [ 'trade_status' ] == 'trade_finished' || $_post [ 'trade_status' ] == 'trade_success' ) { //交易成功 } echo "success" ; //请不要修改或删除 } else { //验证失败 echo "fail" ; //调试用,写文本函数记录程序运行情况是否正常 //logresult("这里写入想要调试的代码变量值,或其他运行的结果记录"); } } } |
然后
这样就成功完成简单的支付功能了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/sangjinchao/article/details/54987999
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。