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

news/2024/4/28 22:13:51/文章来源:https://blog.csdn.net/weixin_34198881/article/details/88628839

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

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

相关文章

深圳网站优化公司浅谈新站不收录的原因及解决方法

新站为何不收录&#xff0c;有没有什么解决办法&#xff1f;今天深圳网站优化公司-数商科技小编就跟大家剖析下新站为何不收录到收录怎么疾速录入的缘由。再讲讲怎么使用SEO疾速收录内容。  一、文章为何不收录  1、彻底是新站&#xff0c;新域名&#xff0c;新空间&#x…

网站502与504错误分析

为什么80%的码农都做不了架构师&#xff1f;>>> 一. 戏说 不管你是做运维还是做开发&#xff0c;哪怕你是游客&#xff0c;时不时会遇到502 Bad Gateway或504 Gateway Time-out。出现这页面&#xff0c;把服务重启下&#xff0c;再实在不行重启下服务器&#xff0c…

[摘录]大型网站架构演变和知识体系

架构演变第一步&#xff1a;物理分离webserver和数据库最开始&#xff0c;由于某些想法&#xff0c;于是在互联网上搭建了一个网站&#xff0c;这个时候甚至有可能主机都是租借的&#xff0c;但由于这篇文章我们只关注架构的演变历程&#xff0c;因此就假设这个时候 已经是托管…

Linux系统小说源码网站,Linux系统小说源码网站

Linux系统小说源码网站[2020-09-10 08:53:34] 简介:php去除nbsp的方法&#xff1a;首先创建一个PHP代码示例文件&#xff1b;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#xff1…

linux 卸载nginx_教你使用nginx部署网站教程

点击上方 蓝色字体 &#xff0c;选择 星标 公众号重磅资讯、干货&#xff0c;第一时间送达今日推荐&#xff1a;在坚持了15年后&#xff0c;我毅然决定离开 Linux&#xff0c;投入 Mac 的怀抱作者&#xff1a;小火柴的蓝色理想链接&#xff1a;www.cnblogs.com/xiaohuochai前面…

访问网站一直显示登录超时自动跳转登录

今天开发人员与业务人员反馈 网站登录显示一直超时登上去之后 几秒钟就会自动跳转登录超时 登录服务器查看日志 继续查看.. 应用程序池错误 然后发现之前好好的C盘 突然爆满 今天写了154个G 百度相关资料 代码有问题于是 询问开发人员 有一个死循环......... 转载于:https://ww…

信息检索 文本相似度 python_使用TF-IDF算法计算网站页面相似度分布(Python)

&#xff08;为保证代码阅读体验&#xff0c;原文链接如下&#xff1a;&#xff09;使用TF-IDF算法计算网站页面相似度分布&#xff08;Python&#xff09;​www.bmpi.dev 如果你的网站网页重复或者相似页面过多将会影响你网站的排名&#xff0c;那么如何计算网站内网页的相似度…

关于大型网站技术演进的思考(五)--存储的瓶颈(5)

原引&#xff1a;http://www.cnblogs.com/sharpxiajun/p/4265853.html 上文里我遗留了两个问题&#xff0c;一个问题是数据库做了水平拆分以后&#xff0c;如果我们对主键的设计采取一种均匀分布的策略&#xff0c;那么它对于被水平拆分出的表后续的查询操作将有何种影响&#…

php网站上传服务器,php网站上传云服务器

php网站上传云服务器 内容精选换一换网站的访问与云服务器的网络配置、端口通信、防火墙配置、安全组配置等多个环节相关联。任意一个环节出现问题&#xff0c;都会导致网站无法访问。本节操作介绍网站无法访问时的排查思路。网站无法访问怎么办&#xff1f;如果打开网站有报错…

wordpress怎么搜索别人_百度URL推送插件 wordpress百度自动推送插件让你的网站收录一路上涨...

自从百度熊掌号宣布下线&#xff0c;就少了一个优质链接提交接口&#xff0c;网站的收录也大不从前&#xff0c;新上线的网站就更不要提了&#xff0c;上线20多天一条都没收录&#xff0c;想着从网站技术上进行解决&#xff0c;自己有没这方面的技术&#xff0c;今天分享的只针…

【爬虫学习笔记day10】1.8. 参考阅读:urllib:GET请求和POST请求+批量爬取贴吧页面数据+有道词典翻译网站+获取AJAX加载的内容+ 处理HTTPS请求 +SSL证书验证 关于CA

文章目录1.8. 参考阅读&#xff1a;urllib&#xff1a;GET请求和POST请求**urllib默认只支持HTTP/HTTPS的GET和POST方法**urllib.parse.urlencode()一般HTTP请求提交数据&#xff0c;需要编码成 URL编码格式&#xff0c;然后做为url的一部分&#xff0c;或者作为参数传到Reques…

【爬虫学习笔记day25】3.3. 案例一:网站模拟登录

文章目录3.3. 案例一&#xff1a;网站模拟登录案例一&#xff1a;网站模拟登录3.3. 案例一&#xff1a;网站模拟登录 案例一&#xff1a;网站模拟登录 # -*- coding:utf-8 -*-# douban.py #codingutf-8 import time from selenium import webdriver from selenium.webdriver.c…

【爬虫学习笔记day28】3.6. 处理一些格式规范的文字+格式规范文字的理想示例+通过Python代码实现+对图片进行阈值过滤和降噪处理(了解即可)+从网站图片中抓取文字

文章目录3.6. 处理一些格式规范的文字处理给规范的文字格式规范文字的理想示例通过Python代码实现对图片进行阈值过滤和降噪处理&#xff08;了解即可&#xff09;从网站图片中抓取文字3.6. 处理一些格式规范的文字 处理给规范的文字 处理的大多数文字最好都是比较干净、格式规…

监控器材律师网站制作_盈信动态 | 制作法律检索报告,律师的必备技能!

为统一法律适用&#xff0c;提升司法公信力&#xff0c;最高人民法院发布《关于统一法律适用加强类案检索的指导意见》&#xff0c;该意见自2020年7月31日起试行。法律检索技能可以帮助律师快速定位关键信息&#xff0c;运用得当&#xff0c;更可促成法律服务成交&#xff0c;提…

vue 同一个域名移动端pc端两套代码跳转_移动端SEO优化与PC端SEO优化的不同点

随着移动互联网的快速发展&#xff0c;用户从PC端向移动端迁移的大趋势更加明显&#xff0c;但这也使得移动手机网站的SEO优化工作还处于探索阶段&#xff0c;很多SEO和站长也都有了一些疑问&#xff0c;移动端需要做SEO优化吗&#xff1f;移动端该怎么做SEO优化&#xff1f;我…

“安利”一个CDN服务商网站

一、CDN简介 CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。CDN是构建在网络之上的内容分发网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内容分发、调度等功能模块&#xff0c;使用户就近获取所需内容&#xff0c;降低…

产品必备技能(三):互联网数据分析师、产品经理和运营常用数据网站合集

文章目录中国互联网络消息中心百度指数阿里指数腾讯大数据友盟DCCI互联网数据中心艾瑞咨询TalkingData易观App StoreApp AnnieAPPDUU清源火眼ASO100IT桔子91助手今日报告网大数据导航中国互联网络消息中心 中国互联网络消息中心 中国互联网络消息中心&#xff08;China Intern…

启明星Portal企业内部网站V4.3版 附演示地址 http://demo.dotnetcms.org

下载地址&#xff1a;http://www.dotnetcms.org/download/portal/PortalV4.3.0.0.rar 启明星Portal系统是一款基于微软ASP.NET平台开发的&#xff0c;集成内容发布、文章、产品、图片、招聘、留言、自定义模型、采集等功能于一体的企业网站管理系统。启明星Portal是构建企业内网…

使用IIS部署网站步骤

安装和打开IIS&#xff08;以WIN8为例&#xff09; 一、打开&#xff1a;控制面板 二、点击&#xff1a;程序 三、点击&#xff1a;启用或关闭Windows功能 四、勾选全部&#xff1a;Internet Information Services 五、等待重启&#xff0c;重启完成后&#xff0c;开始栏菜单…

php robot.txt,WordPress网站SEO优化——Robot.txt文件编写

一、robots 介绍Robots 协议(也称为爬虫协议、机器人协议等)的全称是 “网络爬虫排除标准”(Robots Exclusion Protocol)&#xff0c;网站通过 Robots 协议告诉来访网站的搜索引擎&#xff0c;此网站的哪些页面可以抓取&#xff0c;哪些页面不能抓取。robots.txt 是搜索引擎来访…