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

news/2024/4/28 19:28:56/文章来源:https://blog.csdn.net/weixin_34146986/article/details/88628835

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

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

相关文章

Jenkins与网站代码上线解决方案

1.1 前言 Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后&#xff0c;项目从Hudson项目独立。 Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中&#xff08;例如Apache Tomcat&#xff09;。它支持软件配置管理&#xff08;SCM&#xff09;…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

19款资源整合类网站推荐:每一个网站都堪称以一敌百

强烈推荐这19个资源聚合网站&#xff0c;每一个网站都足以堪称“以一敌百”&#xff01;因为每一个网站都聚合了相当多不同类型、不同领域的网站资源&#xff0c;并且做了分类导航方便大家查找使用~所以&#xff0c;与其收藏那么多零碎的网址&#xff0c;不如收藏下面这些网站资…

百度竞价逐渐淘汰行业网站

最近松松编辑杰哥从百度站长论坛一位圈内站长爆料发帖了解到&#xff0c;百度竞价落地页正在逐渐剔除企业网站&#xff0c;主推自家积木鱼平台和阿里店铺作为竞价推广落地页&#xff0c;逐渐淘汰企业官网! 根据杰哥从站长发帖内容得知&#xff0c;该站长表示&#xff0c;不知道…

曾经的四大门户网站之一,新浪,这些年错过了三个重要的成长机会

曾经的互联网四大门户网站&#xff0c;新浪、网易、搜狐、腾讯&#xff0c;在最初新浪应该是占据首要位置的&#xff0c;因为新浪曾经在中国互联网发展历史上创造过多个第一。 例如&#xff0c;1997年10月&#xff0c;新浪网的前身四通利方获得了一笔数百万美元的风险投资&…

突发丨网站欠费、Netlify故障,BSC上多个项目官网访问异常

从昨天下午开始&#xff0c;BSC上多个项目官网访问异常。先是24号上线的Curve仿盘椭圆金融&#xff08;ellipsis.finance&#xff09;在昨天中午无法打开&#xff0c;这个项目在不到一天的时间里就吸引9亿美元资金入场。昨晚10点多&#xff0c;pancakeswap也无法打开。pancakes…

页面放在哪_企业全网营销型网站建设的重点有哪一些?

企业全网营销型网站建设的重点有哪一些&#xff1f;营销型网站建设&#xff0c;要注重实效&#xff0c;注重客户的需求点&#xff0c;企业做出来营销型网站&#xff0c;不是给自己看的&#xff0c;是给客户看的&#xff0c;这个所有企业都要弄明白&#xff0c;一个网站&#xf…

对csdn网站本身的一些建议

首先&#xff0c;表明自己的立场&#xff1a;我从5月份开始在csdn写博客&#xff0c;前段时间写的不多&#xff0c;但是最近越来越迷上了这个地方&#xff0c;是csdn的忠实用户。其次&#xff0c;我以下提的建议&#xff0c;都是善意的建议&#xff0c;目的是让csdn越来越好&am…

2006年主流建站系统及其典型网站演示(CMS篇)

CMS系统已经成为个人站长建站过程中必不可少的工具&#xff0c;现在已经基本看不到多少站长还在靠手工写HTML页面&#xff0c;究其原因无非是因为CMS具有使用简单&#xff0c;维护方便等众多优点。CMS的发展也带来了个人网站的长足发展&#xff01;各色各样的网站使网络世界更加…

如何将JSP的网页部署到网上变成网站

我们都知道我们做的JSP项目&#xff0c;JSP网页只能在本地&#xff08;自己电脑&#xff09;或者局域网&#xff08;内网&#xff09;访问&#xff0c;如何让所有人都能访问呢&#xff1f; 一. 常见有几大建站语言&#xff0c;有php&#xff0c;ASP&#xff0c;ASP.NET&#…

如何将JSP的网页部署到网上变成网站

我们都知道我们做的JSP项目&#xff0c;JSP网页只能在本地&#xff08;自己电脑&#xff09;或者局域网&#xff08;内网&#xff09;访问&#xff0c;如何让所有人都能访问呢&#xff1f; 一. 常见有几大建站语言&#xff0c;有php&#xff0c;ASP&#xff0c;ASP.NET&#xf…

JavaWeb学习笔记(三)--Web应用组织结构和搭建网站

一、Web应用的组成结构 开发web应用时&#xff0c;不同类型的文件有严格的存放规则&#xff0c;否则不仅可能会使web应用无法访问&#xff0c;还会导致web服务器启动报错。 web.xml文件是整个web应用中最重要的配置文件&#xff0c;必须放置在WEB-INF目录中。在开发web应用时&a…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

WEB网站性能优化之redis缓存技术Centos7

请查看官网&#xff1a; 如果浏览不顺畅请到原文章出处&#xff1a;https://www.sky8g.com/technology/363/ 请注意可能会提示风险&#xff0c;这是CSDN网站设置的问题&#xff0c;如果文章内的链接不是他们的网址,都会对用户提示有风险,请点击继续访问,本网站全部文章为免费技…

php免费学习网站

共同学习&#xff0c;共同进步网站&#xff0c;一个神奇的网站&#xff1a;www.sky8g.com 如果浏览不顺畅请到原文章出处&#xff1a;https://www.sky8g.com/category/news/ 请注意可能会提示风险&#xff0c;这是csdn官网如果不是他们的网址,其他的网址都会提示有风险,这是C…

mysqldump备份数据时网站访问过慢[甚至无法访问]解决办法

现在大多数网站使用都是数据库mysql或者mariadb数据库&#xff0c;因为最直接的原因就是他是开源的的&#xff0c;不需要支付二外的费用&#xff0c;并且性能也很不错&#xff0c;这也是mysql和mariadb如此受人们喜欢的原因。那么我们在进行的数据库的备份的时候&#xff0c;如…

Docker使用docker compose搭建Jellyfin私人媒体服务器 个人电影网站

->Docker及docker compose的安装点这里 创建 docker-compose.yml 文件 version: "3" services:jellyfin:image: jellyfin/jellyfincontainer_name: jellyfinstdin_open: truetty: truerestart: alwaysports:- 9004:8096volumes:- ./config:/config- /nas:/naspr…

获取cdn配置风暴英雄_GitHub Actions+腾讯云COS+SCF云函数刷新CDN自动化部署静态网站...

。作者介绍Stille&#xff1a;互联网重度爱好者&#xff0c;喜欢追求一切基于互联网的前沿科技、技术、产品&#xff0c;目前从事互联网软硬件相关工作。作为强迫症患者&#xff0c;一直对自动化部署非常痴迷&#xff0c;个人认为全自动部署最重要的就是稳定可靠&#xff0c;经…

java家电网站_基于jsp的家电销售网-JavaEE实现家电销售网 - java项目源码

基于jspservletpojomysql实现一个javaee/javaweb的家电销售网, 该项目可用各类java课程设计大作业中, 家电销售网的系统架构分为前后台两部分, 最终实现在线上进行家电销售网各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类家电销售网相关的实体进行管理…

一步步学习SPD2010--第二章节--处理SP网站(4)--删除SP网站

如果你不再需要一个网站&#xff0c;你可以删除它。注意&#xff0c;当你删除网站时&#xff0c;并没有送到回收站。正如在本章节之前看到的&#xff0c;你可以使用SPD创建网站。网站标题反映了用来创建网站的模板名称。例如&#xff0c;你可能会创建很多名为团队网站的网站&am…