TP5加支付宝手机网站支付配置

news/2024/5/20 11:09:55/文章来源:https://blog.csdn.net/weixin_42680298/article/details/85108422

**

TP5加支付宝手机网站支付配置

**

调用支付宝接口的第一天:
之前申请审核手机网站弄了好久,不过审核还挺快的,一天内就审核好了,提交审核必须要有一个测试页面,测试页面中要有货名、单价、重量、合计,我之前是测试页面不达标浪费了很多时间,希望能尽早把这个搞定。
审核完后一看sdk和demo加文档,

这啥啊,什么东西。结果第一天只把沙箱环境配好了,还有秘钥也重新弄好了,demo还没自己本地跑起来,秘钥是加密接口的,要把公钥上传到支付宝,秘钥自己保存好。支付宝沙箱的网关和正式环境的网关是不一样的,多了一个dev
先讲一讲沙箱的配置:

在这里插入图片描述
需要设置的就是应用公钥,支付宝公钥会自动生成,我这里用的是rsa秘钥,rsa和rsa2的区别就是长度不一样,支付宝提供了签名工具,自己下载一下,然后选择对应的语言,其实只有两种选择,一种java,一种非java,生成秘钥和公钥。不知道为啥,我明明设置的秘钥长度为2048,但是产生的是rsa的1024的长度,这个真不知道了,所以我这里提交的是rsa公钥。

调用支付宝接口的第二天
今天把手机网站支付的demo跑起来了,用xampp,xampp的配置不说了,然后把项目放到xampp打开的目录下,点击Admin即可打开

本地跑支付宝手机网站支付demo

注意,想要本地使用的话还需要自己配置demo中的config.php文件,appid,秘钥是签名工具生成的自己要保存好,支付宝公钥在沙箱中看一下就好了。自己填一下。

$config = array ( //应用ID,您的APPID。'app_id' => "",//商户私钥,您的原始格式RSA私钥'merchant_private_key' => "",//异步通知地址'notify_url' => "http://工程公网访问地址/alipay.trade.wap.pay-PHP-UTF-8/notify_url.php",//同步跳转'return_url' => "http://mitsein.com/alipay.trade.wap.pay-PHP-UTF-8/return_url.php",//编码格式'charset' => "UTF-8",//签名方式'sign_type'=>"RSA",//支付宝网关'gatewayUrl' => "https://openapi.alipaydev.com/gateway.do",//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。'alipay_public_key' => "",);

正式环境可以改config配置,然后接着就是测试第一个接口,打开出现以下页面
在这里插入图片描述
点击确定
在这里插入图片描述
在这里插入图片描述

这里选择账号登录,
输入沙箱环境下的买家账号密码,在这里插入图片描述
在这里插入图片描述
确认付款
在这里插入图片描述
输入密码
在这里插入图片描述
完成!
沙箱账号可有钱了
在这里插入图片描述
据说android手机可以下载支付宝沙箱,莫名幸福!
配置到tp5的服务器上有点复杂。
我是把demo放进去的,然后模仿demo中的pay.php写了一段代码:
这段代码初始我是当做一个接口写的,前端vue访问这个接口,然后后来发现并不是这么简单,先看代码。

<?phpnamespace app\api\controller;use app\common\controller\ControllerBase;
use think\Db;
use think\Request;
vendor('alipay/demo/AopSdk');
use alipay\demo\AopSdk;
vendor('alipay/demo/wappay/service/AlipayTradeService');
use alipay\demo\wappay\service\AlipayTradeService;
vendor('alipay/demo/wappay/buildermodel/AlipayTradeWapPayContentBuilder');
use alipay\demo\wappay\buildermodel\AlipayTradeWapPayContentBuilder;
class Alipay
{/*** 测试*/public function pay(){$config = array ( //应用ID,您的APPID。'app_id' => "",//商户私钥,您的原始格式RSA私钥'merchant_private_key' => "",//异步通知地址'notify_url' => "",//同步跳转'return_url' => "",//编码格式'charset' => "UTF-8",//签名方式'sign_type'=>"RSA",//支付宝网关'gatewayUrl' => "https://openapi.alipaydev.com/gateway.do",//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。'alipay_public_key' => "",);$price = input('post.price');//商户订单号,商户网站订单系统中唯一订单号,必填$out_trade_no = 1;//订单名称,必填$subject = '测试';//付款金额,必填$total_amount = $price;//商品描述,可空$body = '商品描述测试';//超时时间$timeout_express="1m";$payRequestBuilder = new \AlipayTradeWapPayContentBuilder();$payRequestBuilder->setBody($body);$payRequestBuilder->setSubject($subject);$payRequestBuilder->setOutTradeNo($out_trade_no);$payRequestBuilder->setTotalAmount($total_amount);$payRequestBuilder->setTimeExpress($timeout_express);$payResponse = new \AlipayTradeService($config);$result['data'] = $payResponse->wapPay($payRequestBuilder,$config['return_url'],$config['notify_url']);$result['msg']='hello';//测试接口用return json($result);}
}

我觉得最难就是:致命错误,该类不存在
建议把php的显示错误行和错误信息打开,不然不知道报错是为什么就难受了。
我以为只要AopSdk.php加进去就可以了,sdk的入口加进去还需要自己导入别的类,而且new后面要加一个反斜杠,是因为命名空间的原因,如果当前类中没有,就去全局搜索这个类,然后出现了写log的权限问题,有点复杂。

调用支付宝接口的第三天
今天老师把写log的权限打开了,已经不会出现不能写log的情况,写log是支付宝AlipayTradeService接口类的一个函数,我是写到了log文件夹下面,这样就不会因为权限问题导致服务器被攻击,现在的log文件夹是所有人都可以写的权限。

//请确保项目文件有可写权限,不然打印不了日志。function writeLog($text) {// $text=iconv("GBK", "UTF-8//IGNORE", $text);//$text = characet ( $text );file_put_contents ( dirname ( __FILE__ ).DIRECTORY_SEPARATOR."./../../log/log.txt", date ( "Y-m-d H:i:s" ) . "  " . $text . "\r\n", FILE_APPEND );}

这里新建了一个log文件夹用来存放log。但是出现了新问题!
在这里插入图片描述
这个函数是AopClient接口类中调用了,具体好像是用来配置编码的….
百度到的一段话:
“因为调用接口时使用的参数里面有中文,调用接口会出现异常问题,后来才明白是编码不一致的问题。然而,我本地项目开发使用的是utf-8,接口那边也是需要utf-8的,那么问题来了,到底哪里的编码不一致呢?
请教了一下高手,原来是php的扩展mbstring没有开启,下面就是开启mbstring扩展,并配置支持utf-8编码的方法:
首先,去掉;extension=php_mbstring.dll 前面的“;”号,开启mbstring扩展;
然后,将对应项都改成下面的值:
mbstring.language = Chinese
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
mbstring.http_input = UTF-8
mbstring.http_output = UTF-8
mbstring.detect_order = UTF-8
mbstring.substitute_character = none”

上面是怎么修改php.ini这个文件,下面是怎么找这个文件,
想要找到php.ini文件并修改这些内容可以在我上面的接口里写一个phpinfo(),然后就可以在network中看到目录了。没图,不想再改回去。

来,已经修改好了上面的东西,如果到这一步没什么问题的话,访问到写的接口的时候就会返回一个form表单,这是支付宝sdk已经做好的事情,我们不用管。
接下来就是整合到tp5的框架中去了。
首先要知道一件事,访问上面的pay接口的时候返回的是一个表单,所以我们要认识到其实这个pay文件不应该是一个接口,而应该是一个tp5的模板文件,把返回的内容写到渲染的模板中。这么一想就简单了,支付宝的demo中已经做好了这件事情,就先修改一下上面的那个文件。
修改成下图所示代码:

<?phpnamespace app\index\controller;/*** 前端首页控制器*/
use think\Db;
use think\Request;
use think\Controller;
vendor('alipay/demo/AopSdk');
use alipay\demo\AopSdk;
vendor('alipay/demo/wappay/service/AlipayTradeService');
use alipay\demo\wappay\service\AlipayTradeService;
vendor('alipay/demo/wappay/buildermodel/AlipayTradeWapPayContentBuilder');
use alipay\demo\wappay\buildermodel\AlipayTradeWapPayContentBuilder;class Alipay extends controller
{public function pay(){$config = array (//应用ID,您的APPID。'app_id' => "",//商户私钥,您的原始格式RSA私钥'merchant_private_key' => "",//异步通知地址'notify_url' => "",//同步跳转'return_url' => "http://balala.edianlai.com/index/client/client_login#/?pcbid=pcbgfdg",//编码格式'charset' => "UTF-8",//签名方式'sign_type'=>"RSA",//支付宝网关'gatewayUrl' => "https://openapi.alipaydev.com/gateway.do",//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。'alipay_public_key' => "",);// $price = input('post.price');//商户订单号,商户网站订单系统中唯一订单号,必填$out_trade_no = 2;//订单名称,必填$subject = '测试';//付款金额,必填$total_amount = 0.02;//商品描述,可空$body = '商品描述测试';//超时时间$timeout_express="1m";$payRequestBuilder = new \AlipayTradeWapPayContentBuilder();$payRequestBuilder->setBody($body);$payRequestBuilder->setSubject($subject);$payRequestBuilder->setOutTradeNo($out_trade_no);$payRequestBuilder->setTotalAmount($total_amount);$payRequestBuilder->setTimeExpress($timeout_express);$payResponse = new \AlipayTradeService($config);$result = $payResponse->wapPay($payRequestBuilder,$config['return_url'],$config['notify_url']);return;}
}

这是一个前端的控制器,我把它命名为Alipay.php,里面的pay方法是返回到的页面的名字,pay代表了pay.html,tp5的模板渲染。
上面的商户订单号在测试的时候一定要注意:如果这次测试以及完成,并且以及成功支付了,那就不要再用同一个订单号了,否则会出现错误。
这里做一次展示所以数据我写死了。
否则会出现下图所示错误
在这里插入图片描述
然后我们可以直接复制demo中的pay.php的html部分代码,新建一个pay.html文件,粘贴代码。Pay.php在demo的wappay下面。

由于我的前端是用vue做的,vue放到服务器上每一次都要打包,测试实在复杂,所以我这里简单化了,点击支付
在这里插入图片描述
调用pay方法,打开前面页面控制器alipay中的pay.html页面,这时候,alipay的pay里面已经通过支付宝的sdk完成我们需要做的一切。

会打开一个新的页面,
在这里插入图片描述
继续支付,然后账号密码登录,账号密码就用沙箱提供了账号密码即可,支付的过程就和上面的一样了。

确认支付!
在这里插入图片描述
输入支付密码就ok了
支付成功后应该会回跳,我还没设置。
这样就完成了tp5+支付宝手机网站支付功能。
心得:配置真的要命,写博客的意义在于记住血一样的教训并且指导大家不要再次犯错,作为一个新人,欢迎指出错误。

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

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

相关文章

PHP支付宝手机网站支付notify异步通知

$config array (//应用ID,您的APPID。app_id > "",//商户私钥&#xff0c;您的原始格式RSA私钥merchant_private_key > "",//异步通知地址notify_url > "",//同步跳转return_url > "",//编码格式charset > "UTF-…

vue使用prerender-spa-plugin预渲染进行seo优化

前言 单页应用&#xff08;SPA&#xff09;是最近流行的一种应用模式&#xff0c;它支持在同一页面下通过哈希&#xff08;hash&#xff09;或html5的history api实现不刷新式切换视图&#xff0c;既实现了动态路由的变化&#xff0c;也实现了历史记录的保持&#xff0c;然而&a…

ASP.NET MVC网站部署在阿里云服务器(WindowsServers2012+IIS6.0环境)

在部署网站之前&#xff0c;购买阿里ESC服务器之后&#xff0c;咱们需要部署IIS6.0的网站的服务&#xff0c;如果已经弄好的话可以跳过&#xff0c;没弄好的话&#xff0c;可以借鉴一下我的上一篇文章阿里云windows server 2012 配置asp.net的IIS服务&#xff0c;希望对你IIS的…

在外网通过服务器公网IP访问IIS发布ASP.NET网站

在把网站部署在服务器的IIS上以后&#xff0c;我就开始浏览我的网站了。如果不会部署&#xff0c;可以看我ASP.NET MVC网站部署在阿里云服务器&#xff08;WindowsServers2012IIS6.0环境&#xff09;。 在我的预想中当然是一帆风顺了&#xff0c;这种情况在理想中总是丰满的&a…

码农如何快速打造一个有设计感的网站 How to Make Your Site Look Half-Decent in Half an Hour

像我这样的程序员来说经常被“设计”这个词吓到&#xff0c;因为我是一名程序员而不是设计师&#xff0c;我拥有的是计算机学位证&#xff0c;另外我对 Comic Sans 字体并不介意。&#xff08;注&#xff1a;Comic Sans 字体是 Win95 附带的一种漫画字体&#xff0c;设计行业极…

爬虫xx网站论坛的帖子源码分享

import re import time from urllib import parse import urllib import requests def updatepostinfo(startid,endid): for num in range(int(startid),int(endid)1): time.sleep(2) print(num) posturl"http:网站/detailnew.php?id&…

某淘客网站的爬虫数据并写入到excel文件中的源码

def hdktest(url,userid): try: pcresurllib.request.urlopen(url) pcrespcres.read().decode() return pcres #异常处理 except urllib.error.HTTPError as reason: taskinfohdktask.objects.get(hdktask_linkuseriduserid) …

使用django实现某淘客网站采集功能

原来设计的效果如下 后来根据需求又改了一版效果如下 源码分享&#xff1a; {% load customtag %} <!DOCTYPE html> <html lang"zh-CN"> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"&…

DEDECMS风水织梦模板带手机站,DEDECMS风水网站

模板介绍&#xff1a; 织梦最新内核开发的模板&#xff0c;该模板属于风水行业&#xff0c;企业通用&#xff0c;企业管理&#xff0c;企业咨询等企业均可以使用该模板&#xff0c;页面简洁简单&#xff0c;容易管理&#xff0c;附带测试数据&#xff01; 模板特点&#xff1a…

ecshop商城自定义URL链接SEO优化排名_ecshop商城自定义URL静态html

简介&#xff1a; ecshop商城优化提高网站排名重要三步缺一不可&#xff1a;ecshop自定义URL链接静态URL,ecshop自定义title标题&#xff0c;ecshop自动内链接。很多ecshop商城站长对商城创建以后感觉就完事了&#xff0c;好像并不在乎网站排名和收录&#xff0c;如果一个商城创…

给ECSHOP每个商品自己设置URL名称地址提高SEO优化插件

插件简介&#xff1a; ecshop商品自定义url和标题&#xff0c;这个是很多人都追求的一个功能。为了让ecshop更加加强SEO优化。我们就不得不对ecshop url进行自定义。本插件适合任何摸板以包括最新ecshop4.1插件内附带有详细安装说明&#xff0c;自己完全可以安装。插件代码不加…

[SEO优化必备]ECSHOP商城全站自定义TITLE标题插件

插件简介 ECSHOP自定义TITLE标题插件 ECSHOP自定义TITLE标题插件演示地址看本插件浏览器上面标题和商品标题显示不一样就明白了&#xff01; ECSHOP商城全站自定义TITLE标题ECSHOP插件&#xff1a;包含 商品页&#xff0c;商品分类页&#xff0c;商品品牌&#xff0c;文章页 &a…

实现ECSHOP商品自定义URL链接地址插件【提高SEO优化必备】

插件说明&#xff1a;本插件给ECSHOP每个商品自定义URL名称地址提高SEO优化插件 功能特色&#xff1a; ECSHOP虽然支持伪静态&#xff0c;但是伪静态的规则稍有死板。如果ECSHOP每个商品都能自定义URL&#xff0c;那对SEO将很有帮助。本店提供的这个"ECSHOP所有商品自定…

2022最新可用网页百度分享按钮安装教程【网站添加百度分享按钮代码】

简介&#xff1a; 2022最新可用百度分享是一个提供网页地址收藏、分享及发送的WEB2.0按钮工具&#xff0c;借助百度分享按钮&#xff0c;网站的浏览者可以方便的分享内容到人人网、开心网、QQ空间、新浪微博等一系列SNS站点。 网站主可以在百度分享网站中获得分享按钮JS代码&a…

ECSHOP优化外链插件【ecshop优化seo插件】提高ECSHOP商城优化,商品页,文章外链优化插件,SEO插件

参考各大电商一些相关经验&#xff0c;把ecshop文章商品内容里的外链加上跳转页面提示&#xff0c;感觉非常使用实用而且对seo优化提升还不错&#xff0c;那么 ECShop 外链默认都是直接跳转的&#xff0c;没有这方面的插件&#xff0c;所以ECSHOP插件网就做了一个类似的插件&am…

ECSHOP网站日志,ECSHOP维护工具,ecshop错误查看,ECSHOP管理员日志,ECSHOP管理员操作记录

插件简介 对于ECSHOP开发者来说&#xff0c;一旦某个产品投入使用&#xff0c;应该立即将display_errors选项关闭&#xff0c;以免因为这些错误所透露的路径、数据库连接、数据表等信息而遭到黑客攻击。但是&#xff0c;任何一个产品在投入使用后&#xff0c;都难免会有错误出现…

ecshop商城SEO优化自动内链接插件,ecshop自动内链接提高搜索引擎排名收录,ECSHOP自动内链插件,ECSHOP商城优化插件,seo优化插件

ecshop商城网站内链优化有什么作用&#xff1f;内链优化技巧&#xff01; 在网站优化中&#xff0c;有一种优化叫做“内链优化”&#xff0c;顾名思义就是对网站站内的链接进行优化&#xff0c;内链优化是SEO站内优化至关重要的的一环&#xff0c;也正是基于这种认识&#xff0…

ecshop网站导航,html导航分类,分类导航,html分类式导航栏,html分类导航页面插件【有利于网站排名seo优化】

网站导航给优化带来的好处 一个靠谱的网站&#xff0c;它必然在各方面对细节都是非常的在意的&#xff0c;而且对于细节的优化也是把控的很到位。而且许多不够老练的优化师往往会忽视一些优化操作&#xff0c;例如说网站导航栏的优化。对此小编就在这里给大家着重说说网站导航对…

ECSHOP商城SEO优化商城更新内容后将页面链接自动推送给百度

ECSHOP商城SEO优化篇:商品新增加内容或者更新内容以后如何快速让搜索引擎收录?这时候就要用到自动推送功能让搜索引擎知道新增加内容了。ECSHOP商城做好需要SEO优化其中优化之一就是将网站新内容通过自动推送给百度搜索引擎&#xff0c;站长只需安装推送插件&#xff0c;在新发…

ECSHOP多语言插件,ECShop外贸网站添加谷歌翻译,ECShop中添加谷歌翻译,ECShop谷歌语言翻译插件

ECSHOP多语言插件,ECShop外贸网站添加谷歌翻译,ECShop中添加谷歌翻译,ECShop谷歌语言翻译插件 我们生活在一个多样化的世界&#xff0c;人们说许多不同的语言。根据语言学家的说法&#xff0c;世界上有6000到7000种不同的语言。虽然很多人都懂英语&#xff0c;但是如果你的网站…