TP5实现支付宝电脑网站支付学习笔记

news/2024/4/27 8:58:03/文章来源:https://blog.csdn.net/weixin_33935777/article/details/88628831

这两天在公司做一个小型WEB项目,需要有支付功能。第一次做支付宝的支付,踩了点小坑,还算顺利。激动的我赶紧记下实现的流程。
第一步当然是在支付宝开放平台申请公钥私钥APPID等,支付宝关官方文档都有详细介绍,这里就省略。
申请完了下面开始开发者的实现流程。首先是下载支付宝的官方DEMO,网址是https://docs.open.alipay.com/... 这里建议下载官方的DEMO而不是SDK,因为对新手来说DEMO里有封装好的函数可以直接拿来改改就用,比较友好。以后技术提升了,再拿SDK玩玩。
图片描述

因为我是个PHPer,当然选择PHP版。下载好之后默认名字是alipay.trade.page.pay-PHP-UTF-8,建议改名字为alipay即可。
因为我是用TP5开发,所以放到项目根目录下的外部资源包vendor目录中。
图片描述

放进去之后,找到alipay目录下pagepay目录下的pagepay.php文件,这便是阿里官方提供的支付方法样例,
图片描述
我学着网上一位学长的写法改了一下放到TP5的方法中,见下图:
图片描述
走到这里如果顺利,便会出现支付宝的二维码页面。我这里因为客户重新申请权限所以没法截图了。就是那个支付宝二维码的页面。扫码支付,便会跳转到支付成功页面,最后会跳到你自定义的同步跳转地址。

价格由前台表单传值即可,这里强调有三个必填项:订单号、订单名称、付款金额,这三个缺哪一个都会报错。我刚开始脑袋发晕,把订单名称去掉了,结果报错了...
这里写完之后,便去config.php配置各项参数,config.php在alipay的根目录下,配置这一项至关重要。如果错了,商家可是收不到款的噢...
这里是傻瓜填法,应用ID、私钥、异步地址、同步地址、公钥。这6项必须填正确。因为我是用的TP5,所以通知地址那里我改成了TP5的写法,模块/控制器/方法.
支付宝网关那里不要更改,如果是沙箱环境,需要改成"https://openapi.alipaydev.com/gateway.do" 多了个"dev",因为我是真实环境,所以就不用更改。

图片描述

这里再说一下异步和同步地址,新人肯定不知道是有什么用,大佬略过即可。支付宝支付成功后会执行这两个方法,系统会把你支付的信息用POST方式异步传给你的方法。因为是异步,所以页面是没有变化的,所谓"打枪的不要,悄悄地进村..."在异步这个方法里可以写你自己的业务逻辑。比如接收值,存入数据库之类。这里有个大坑,坑了我两天即在异步方法里是没法用session取值的,我原本想用session取用户登录id存入数据库中,后来问了师傅才知道,异步是服务器和服务器之间的交互,所以没有cookieId,没有cookieId当然没有session值。对这里不懂的童鞋可以复习下session基础知识,惭愧,我居然把这么基础的东西忘了...由此可知,同步方法是可以取session的,因为是服务器和客户端的交互。如果对此没概念,可以在异步方法接收参数后转成JSON格式,然后用file_put_contents()函数写到记事本里看一下。
例:{

"gmt_create":"xxxxxxxx",//订单创建时间
"charset":"UTF-8",
"gmt_payment":"xxxxxxxx", //付款时间
"notify_time":"xxxxx",   //异步回调时间
"subject":"XXXXX",     //订单名称
"sign":"xxxxxxxxxxxxxxxxxxx",
"buyer_id":"xxxxxxxx",
"invoice_amount":"xxxxx",
"version":"1.0",
"notify_id":"xxxxxxxxx",
"fund_bill_list":"[{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}]",
"notify_type":"trade_status_sync",
"out_trade_no":"xxxxxxxx", //订单号
"total_amount":"0.01",
"trade_status":"TRADE_SUCCESS", //success代表支付成功,商家会收到钱
"trade_no":"xxxxxx", //支付宝流水号
"auth_app_id":"xxxxxxxx",
"receipt_amount":"0.01",
"point_amount":"0.00",
"app_id":"xxxxxxxxx",
"buyer_pay_amount":"0.01",
"sign_type":"RSA2",
"seller_id":"xxxxxxxxxxxxx"

}
重要的我都加了注释了,其他不明白的参数可以去官方文档查询。
同步方法,顾名思义,就是页面同步跳转的地址,即能让客户看见的页面。这里自定义即可,比如提示用户支付成功之类文字。
下面是异步和同步方法的示例写法:
/**

  • 异步同步示例

*/
class Alipay extends Controller {

    
/*** 异步方法* @return [void] */
public function notify(){$post = input();if($post['trade_status'] == "TRADE_SUCCESS"){//操作数据库 修改状态echo "SUCCESS";//返回给支付宝成功 ,不返回这个  字符 ,支付宝定时 回调这个方法 时间 5   10   30/m  1小时 成功为止}//写在文本里看一下参数$data = json_encode($post);file_put_contents("alipaytext.txt",$data);
}/*** 同步方法* @return [type] [description]*/
public function returnfy(){//同步跳转地址return $this->fetch();
}

}
这里面重要的是需要在异步方法里判断trade_status字段,如果等于"TRADE_SUCCESS"即支付成功,后面必须echo返回一个"SUCCESS",否则支付宝会认为你没有付款成功,而在24小时内定时回调这个方法。实际业务逻辑根据你的需求来比如存入订单表等等,当然不会这么简单,最好加一些验证。为了安全。下面是前台代码示例:
{include file="public/header"}

<!-- HEADER END -->
<!-- CONTENT BEGIN -->
<div id="content" class="right_sidebar"><div class="inner"><div class="general_content"><div class="main_content">    <form name=alipayment action="{:url('index/alipay/index')}" method="post">商户订单号:<input type="text" name="out_trade_no" value="123" /><br/>订单名称:<input type="text" name="t_name" value="a"/><br/>付款金额:<input type="text" name="total_amount" /><br/>商品描述:<input type="text" name="t_body" value=""/><br/><button type="submit">付 款</button></form></div>{include file="public/right"}<div class="separator" style="height:31px;"></div><div class="clearboth"></div></div></div>
</div>
<!-- CONTENT END --><!-- FOOTER BEGIN -->

{include file="public/tail"}

最后补上一句:日志文件一定要开启写权限,否则无法自动写入。即在alipay文件夹下右键log.txt属性设置。出了问题可以在日志里查看。

走到这里,流程就基本介绍完了。欢迎各位大佬拍砖指导。做完支付,会感觉自己又上了一个台阶!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_823138.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何修复php网站漏洞

近日&#xff0c;我们SINE安全对metinfo进行网站安全检测发现&#xff0c;metinfo米拓建站系统存在高危的sql注入漏洞&#xff0c;攻击者可以利用该漏洞对网站的代码进行sql注入攻击&#xff0c;伪造恶意的sql非法语句&#xff0c;对网站的数据库&#xff0c;以及后端服务器进行…

网站点击进去出现“该内容被禁止访问”的拦截处理

很多客户的网站被拦截并提示&#xff1a;“该内容被禁止访问”&#xff0c;大多数客户使用的都是阿里云的虚拟主机以及ECS服务器&#xff0c;最近发生这种问题的网站也越来越多&#xff0c;这几天刚解决完一个客户网站被阿里云&#xff1a;违规URL屏蔽访问处理通知并拦截&#…

网站漏洞修补之苹果cms建站系统

苹果cms系统&#xff0c;是目前很多电影网站都在使用的一套网站系统&#xff0c;开源&#xff0c;免费&#xff0c;扩展性较好&#xff0c;支持一键采集&#xff0c;伪静态化&#xff0c;高并发的同时承载&#xff0c;获得的很多站长的喜欢&#xff0c;于近日被网站安全检测发现…

网站漏洞修复案例之Discuz!3.4最新版本

Discuz!论坛目前最新版本为3.4版本&#xff0c;已经好久没有更新了&#xff0c;我们SINE安全在对其网站安全检测的同时发现一处漏洞&#xff0c;该漏洞可导致论坛的后台文件可以任意的删除&#xff0c;导致网站瘫痪&#xff0c;后台无法登陆。关于该网站漏洞的细节我们来详细的…

网站被劫持攻击以及流量攻击如何解决

目前越来越多的服务器被DDOS流量攻击&#xff0c;尤其近几年的DNS流量攻击呈现快速增长的趋势&#xff0c;DNS受众较广&#xff0c;存在漏洞&#xff0c;容易遭受到攻击者的利用&#xff0c;关于DNS流量攻击的详情&#xff0c;我们来大体的分析一下&#xff0c;通过我们SINE安全…

网站漏洞修复公司对验证码安全检测修复方案

在对网站安全进行整体的安全检测的时候&#xff0c;用户登陆以及用户留言&#xff0c;评论&#xff0c;设置支付密码&#xff0c;以及一些网站功能方面都会用到图片验证码&#xff0c;针对于验证码我们SINE安全对其进行了详细的网站安全检测&#xff0c;以及图片验证码安全防护…

如何修复网站漏洞 Kindeditor任意上传文件修补

很多建站公司都在使用Kindeditor开源的图片上传系统&#xff0c;该上传系统是可视化的&#xff0c;采用的开发语言支持asp、aspx、php、jsp,几乎支持了所有的网站可以使用他们的上传系统&#xff0c;对浏览器的兼容以及手机端也是比较不错的&#xff0c;用户使用以及编辑上传方…

wordpress网站安全防护办法

我们主要是讲一下wordpress的安全问题&#xff0c;对于安全问题的话&#xff0c;它其实是相当的复杂&#xff0c;因为会涉及到好几个方面&#xff0c;除了你自己网站程序系统之外&#xff0c;还有就是wordpress&#xff0c;它有非常庞大的生态&#xff0c;这些主题插件它们都可…

秋式网站日志分析器简单用法(转)

转自&#xff1a;https://www.cnblogs.com/cyq1162/archive/2013/04/29/3050857.html 秋式网站日志分析器[IISLogViewer] V3版本发布 离上一个版本&#xff0c;过了好久好久了。 V1.0时&#xff0c;叫&#xff1a;CYQ.IISLogViewer。 V2.0时&#xff0c;给了个中文名&#x…

使用PolarDB与ECS搭建门户网站

使用PolarDB与ECS搭建门户网站 体验目标 本场景将提供一台基础环境为CentOS的ECS&#xff08;云服务器&#xff09;实例和已经创建好的PolarDB数据库实例。我们将会在这台服务器上安装WordPress&#xff0c;帮助您快速搭建自己的云上博客。 背景知识 PolarDB数据库简介 是阿里…

使用github建立自己的简单网站并绑定域名

使用github建立一个自己的简单网站 准备工作&#xff1a;在建立简单网站的时候不需要使用到git&#xff0c;但是后续在向网站中新增内容时&#xff0c;需要使用到git命令 这里git的安装可参考我的上一篇文章https://blog.csdn.net/liver100day/article/details/115919398 注册…

Windows server 2008 IIS7发布asp.net mvc网站css、js脚本无法访问 问题解决

网站发布成功&#xff0c;浏览网站内容数据显示正常&#xff0c;CSS与JS都无法加载&#xff0c; 解决方法&#xff1a; 找到发布的对应站点在功能视图中找到“身份验证“双击打开 找到“匿名身份验证” 右击选择“编辑”或是在右侧操作栏中点击“编辑…” 打开对话框“编辑匿…

描述php网站的构架文档,wordpress主题模版文件及页面结构详解

摘要&#xff1a;无论是使用还是制作wordpress都需要对wordpress主题模板结构有一个简单的了解。搞清楚基本层式结构即可清楚哪...无论是使用还是制作wordpress都需要对wordpress主题模板结构有一个简单的了解。搞清楚基本层式结构即可清楚哪些文件负责调用哪些内容&#xff0c…

css设置画面平铺,玩转CSS | 设置网站平铺自适应全屏背景CSS代码

【摘要】简介&#xff1a;设置网站背景&#xff0c;根据用户屏幕大小&#xff0c;自动适应&#xff01;适用于EMLOG各个模板&#xff0c;并且测试在其他的建站系统&#xff0c;CMS,wordpress&#xff0c;Zblog都可以正常的使用&#xff01;效果如图&#xff1a;body{background…

linux 查看网站并发数,Linux 查看 TCP并发数

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;查看httpd进程数(即prefork模式下Apache能够处理的并发请求数)&#xff1a;Linux命令&#xff1a;ps -ef | grep httpd | wc -l返回结果示例&#xff1a;17查看Apa…

Java开发者必备十大学习网站

作为开发者来说&#xff0c;必备的除了对编码的热情还要有自己的一套技巧&#xff0c;另外不可缺少的就是平时学习的网站。以下本人收集的 Java 开发者必备的网站&#xff0c;这些网站可以提供信息、以及一些很棒的讲座 , 还能解答一般问题、面试问题等&#xff0c;或许你会认为…

让自己的网站作品与世界相通

第一步&#xff1a;先注册一个属于自己的域名&#xff0c;这个域名是独一无二的。推荐到主机屋注册一个&#xff0c;其实在哪里注册都是一样的&#xff0c;但是主机屋提供免费的地址解析服务&#xff08;只对在主机屋注册的域名免费&#xff09;。 主机屋官网&#xff1a;http:…

Python实现抓取网站子域名实现方式

有时候需要用Python获取某个网站的子域名&#xff0c;在检测一些大站的时候常会用到。以前找某个网站的子域名我用的方法是在网站内和链接处找&#xff0c;偶尔也会用到google。后来听朋友乔三少说bt5下有个获取子域名的小工具&#xff0c;没怎么在意。有一天要获取某个网站的子…

Python之 - 使用Scrapy建立一个网站抓取器,网站爬取Scrapy爬虫教程

Scrapy是一个用于爬行网站以及在数据挖掘、信息处理和历史档案等大量应用范围内抽取结构化数据的应用程序框架&#xff0c;广泛用于工业。 在本文中我们将建立一个从Hacker News爬取数据的爬虫&#xff0c;并将数据按我们的要求存储在数据库中。 安装 我们将需要Scrapy以及 …

快速排名系统询火星推荐_360网站快速排名系统 - 影响网站排名的外链因素

原出处&#xff1a;超级排名系统原文链接&#xff1a;http://www.chaojipaiming.com360网站快速排名系统注册地址 seo.chaojipaiming.com 网站关键词快速排名优化&#xff0c;7-15天关键词排名到首页&#xff0c;PC端和移动端都可以优化&#xff0c;支持百度、搜狗、360、神马等…