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

news/2024/4/27 17:35:38/文章来源:https://blog.csdn.net/weixin_34122604/article/details/88628838

这两天在公司做一个小型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_763131.aspx

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

相关文章

给大家推荐5个外国黑客技能学习网站

#1 – Hacking Tutorial: Tech Tips and Hacking Tricks Sometimes, perfect English isn’t everything. Hacking Tutorial is an example of when the writing skill of the author doesn’t necessarily equate to the quality of his or her technical knowledge. This is …

大型网站技术架构(六)网站的伸缩性架构

2019独角兽企业重金招聘Python工程师标准>>> 网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能&#xff0c;通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。 1、网站架构的伸缩性设计 网站的…

百度seo排名点击器app_百度SEO排名的优化技巧

百度竞价排名对于小型企业来投入成本高&#xff0c;但是互联网营销推广中&#xff0c;在百度首页有企业网站的网络形象对于用户群体是非常重要的。小型企业&#xff0c;商家可以通过很多简单、有效的方法来提升网站在百度的排名。首先要做的是创建一个网站&#xff0c;然后可以…

nextcloud网站不安全_玩转Nas-010,超简单之基于宝塔面板搭建nextcloud私有云

从博主之前的文章可以看出&#xff0c;博主对于公有云是极其不信任的(完全个人存储癖)&#xff0c;所以后来买了airdisk、群晖和蜗牛星际&#xff0c;一路折腾下来&#xff0c;在没有群晖前&#xff0c;博主一直用的是dropbox和nextcloud。现在两台群晖设备&#xff0c;除了偶尔…

ad域帐号登录提示无法处理请求_基于 Spring Boot 和 WxJava 实现网站接入微信扫码登录...

1. 概述项目源码&#xff1a;https://github.com/DavidWhom/wechat-login如果项目存在什么问题&#xff0c;欢迎大家提 issue&#xff0c;期待你的来访demo 使用了Spring Boot 和 WxJava (微信开发 Java SDK&#xff0c;支持包括微信支付、开放平台、小程序、企业微信/企业号和…

seo查询工具源码_公开这一seo技术要点,供给seo工具开发者研究

高粱seo从事seo工作&#xff0c;不知不觉已经将近7年时间了&#xff0c;从对seo一无所知&#xff0c;到熟练掌握&#xff0c;再到seo各种技术如seo自动化&#xff0c;seo点击器的研究开发&#xff0c;在这个过程中虽然遇到了很多问题&#xff0c;需要自己去学习&#xff0c;探索…

Discuz x2.5论坛SEO设置的方法和优化技巧

这篇文章主要讲解Discuzx2.5论坛SEO设置的方法和优化技巧&#xff0c;关于SEO优化的常识和知识不讲解&#xff0c;大家可以到SEO优化版块学习。Discuz x2.5 论坛SEO优化涉及到4处&#xff1a;1、全局--站点信息--站点名称、网站名称和网站 URL;2、全局--站点功能--管理相关--开…

seo优化源码_三原关键词seo优化价格,java小程序多少钱

西安辰乐科技为您详细解读JMwQtg三原关键词seo优化价格的相关知识与详情&#xff0c;SEO(Search Engine Optimization):汉译为搜索引擎优化。搜索引擎优化是一种操纵搜索引擎的搜索划定规矩来进步目前网站正在有关搜索引擎内的天然排名的方式。要想保持权重优化不会波动&#x…

MySQL效能器着名网站中的使用量

2008 年4月18日&#xff0c;在Alexa摆设的一次“Scaling MySQL -- Up or Out?” 的小组争执中&#xff0c;MySQL、Sun、Flickr、Fotolog、Wkipedia、Facebook、YouTube等国际着名网站的DBA们&#xff0c;对其网站MySQL数据库效能器、Web效能器、缓存效能器的数量&#xff0c;M…

php判断是否从网站上传数据,ThinkPHP上传文件及如何判断上传数据是否重复

文件上传1.在ThinkPHP中使用上传功能无需进行特别处理&#xff0c;但要注意&#xff0c;要使用上传功能 表单中需要设置 enctype"multipart/form-data"。2.tp自带了上传文件的类&#xff0c;位置&#xff1a;Think/Upload.class.php。所以tp框架用起来是十分方便的。…

精伦210使用谷歌浏览器开发_谷歌 Chrome 浏览器将限制在非 HTTPS 网站使用游戏手柄...

IT之家7月29日消息 本月初&#xff0c;报道称&#xff0c;微软一直在努力为Windows 10和Windows 10X上的Chromium浏览器带来完整的Windows.Gaming.Input API支持。随后&#xff0c;谷歌在Chrome 86浏览器上增加了对Windows.Gaming.Input API的支持。现在&#xff0c;谷歌似乎正…

测网站服务器带宽,测网站服务器带宽

测网站服务器带宽 内容精选换一换弹性云服务器(Elastic Cloud Server)是一种可随时自动获取、计算能力可弹性伸缩的云服务器&#xff0c;可帮助您打造可靠、安全、灵活、高效的应用环境&#xff0c;确保服务持久稳定运行&#xff0c;提升运维效率。适用于有加速需求的网站&…

php企业站项目,343PHP005小型企业网站系统|程序项目源码 - A保站

功能性需求1 网站的基本信息设置(1) 对于网站名称应该可以在后台自定义&#xff0c;前台进行显示。(2) 网站的一些简单控制&#xff0c;如是否允许未注册人员下载网站资料&#xff0c;可以在后台动态设置。(3) 网站前台显示的时间格式也可以设置。(4) 前台新闻页每一页显示的文…

网站性能工具Yslow的使用方法

Yslow是雅虎开发的基于网页性能分析浏览器插件&#xff0c;从年初我使用了YSlow后&#xff0c;改变了博客模板大量冗余代码&#xff0c;不仅提升了网页的打开速度&#xff0c;这款插件还帮助我分析了不少其他网站的代码&#xff0c;之前我还特意写了提高网站速度的秘籍&#xf…

好玩的网站 可以实时看到任意航班的实时情况 位置 高度

周末放松一下&#xff0c;介绍二个网站&#xff0c;可以看到任意航班的实时情况 位置 高度&#xff0c;如果自已做飞机到某地旅游或商务办公时&#xff0c;可以试玩一下&#xff0c;感觉好像自已在开飞机啊。。。&#xff11;. http://tianyan.baidu.com/sky  百度天眼&…

大型网站图片服务器架构的演进(转)

在主流的Web站点中&#xff0c;图片往往是不可或缺的页面元素&#xff0c;尤其在大型网站中&#xff0c;几乎都将面临“海量图片资源”的存储、访问等相关技术问题。在针对图片服务器的架构扩展中&#xff0c;也会历经很多曲折甚至是血泪教训&#xff08;尤其是早期规划不足&am…

如何在防火墙或路由器中禁止访问一些公司不相关网站

如何在防火墙或路由器中禁止访问一些公司不相关网站&#xff0c;如果一些招聘网站&#xff0c;非常钓鱼网站&#xff0c;假冒的网站等。如下图示例中&#xff0c;作者就是把家中的路由器禁止访问相关 招聘网站转载于:https://blog.51cto.com/hangtc/1683189

js搭建网站 web服务器,AngularJS如何搭建web服务器?angularjs搭建web服务器的详细过程...

本篇文章主要的介绍了关于angularjs启动web服务器的操作&#xff0c;希望能帮到大家&#xff0c;现在开始看文章吧安装node.js下载链接官网地址&#xff1a; https://nodejs.org/en/我下的解压版的&#xff0c;直接解压到你想安装的目录中在我的电脑(右键)→属性→高级系统变量…

云服务器测速脚本_一台华为云服务器来测试并用docker快速搭建2048网站

一&#xff1a;前言搞了一台华为云服务器&#xff0c;并写下这篇文章来测试并用docker快速搭建2048网站 二&#xff1a;步骤2.1连接华为云服务器进入控制台 之后输入账号和密码登录。2.2安装docker和配置daocloud加速器curl -sSL https://get.daocloud.io/docker | sh该安装包适…

大型网站架构系列:消息队列(二) (转)

本文是大型网站架构系列&#xff1a;消息队列&#xff08;二&#xff09;&#xff0c;主要分享JMS消息服务&#xff0c;常用消息中间件&#xff08;Active MQ&#xff0c;Rabbit MQ&#xff0c;Zero MQ&#xff0c;Kafka&#xff09;。【第二篇的内容大部分为网络资源的整理和汇…