支付宝app支付,订单参数错误/PHP生成支付宝预支付订单/php 支付宝app支付

  • 以PHP为服务端语言,java为app端开发语言的支付宝app支付流程及常见的问题说明
    • 1.为什么app前端支付,要通过服务端这一步
    • 2.支付流程总述
    • 3.其中,服务端干两件事,通知支付和拿到允许支付的请求
    • 3.1PHP服务端SDK下载与配置
    • 4.遇到的大坑
    • 5.重要的事情说一遍

以PHP为服务端语言,java为app端开发语言的支付宝app支付流程及常见的问题说明

前期的准备工作在这里不细讲,包括开通对公支付宝,开通app支付产品,配置app支付的私钥公钥,以及上线app,这些都是基础操作,不涉及程序编码,这里不做详细讲解,讲解从服务端编码开始,到app拉起支付。

1.为什么app前端支付,要通过服务端这一步

首先要理解这一点,便于后续的流程讲解。因为直接在app端拉起支付,就意味着把一些重要信息要放在app端进行保存,比如支付的公钥和私钥,那么一旦app被反编译,信息就会被暴露,造成数据安全问题。所以我们一般选择在服务端生成订单信息,然后将订单信息返回给app前端,前端再拉起支付,完成支付。

2.支付流程总述

说白了,支付的时候就是要干三件事,第一件事是,通知支付宝,你要准备进行支付(包括要支付的商品名称,价格等信息);第二步就是支付宝答应你可以发起支付请求,但是必须要按照你刚才申请的信息来请求,不能更改信息。为了防止你对信息进行变更,支付宝说,那干脆你通知我准备支付后,我把你支付的信息做一个封装,然后锁上一把锁,原路给你,到时候你就拿着我给你的这玩意再来支付就行了。于是,支付宝给你了一个数据包,上面有一把锁,这个锁就是支付宝的“加签”,意思我加密了,你不要想修改数据。第三件事,你拿着这个加锁数据包申请支付宝支付,支付宝在收到你这个包以后,用钥匙进行解锁,如果能解开,说明你信息没有变更,可以支付;如果解不开,说明你信息变更了,那就会拒绝支付。这里的解锁,就是支付宝的“验签”,就是校验通过,允许支付,校验失败,拒绝支付,报相关错误。

3.其中,服务端干两件事,通知支付和拿到允许支付的请求

因为涉及到数据安全问题,所以一般通知支付宝要支付和拿到支付许可,都在服务端完成,服务端拿到支付许可,返回给APP前端,app再拉起支付就行。

3.1PHP服务端SDK下载与配置

  1. PHP服务端sdk下载 :
    打开https://github.com/alipay/alipay-sdk-php-all,下载SDK,下载以后,放到服务器的根目录下,或者根据你的代码结构,放到相关的文件结构下。

2.编辑请求文件
找到以下(aop->test->AopClientTest.php)文件目录,并打开

此PHP文件结构分为两部分,第一部分,头部引用,即把sdk里面的文件引入进来,

引入路径根据你sdk存放的位置进行调整,比如有时候用到绝对路径

类似这样,总之引入进来就行。
另一部分是是三个调用示例

服务端进行app支付调用,用的是第2个调用示例, 2、sdkExecute 调用示例
我们把1和3的调用示例注销掉或者删除掉,只留实例2
下面我们来进行参数说明和构造

所有参数里面,最重要的是一个叫setBizContent的参数,这是关键,里面包含了各种商品信息,包括总金额total_amount,订单号out_trade_no等,官方sdk给的样式是这样的

但这样的问题在于,一,有很多参数用不到,二,不好进行编辑。所以我们来分析一下参数的形式,setBizContent的参数形式是一对{},里面多个键值对,也就是说,setBizContent的参数其实是一套键值对对象,那么我们就可以通过构造键值对对象来替换sdk原始参数,那么我们setBizContent的参数改成下面的写法

即我们创建了一个object对象,然后对对象内的键值对进行赋值,然后把对象用json编码,编码后传递给setBizContent。这样的写法便于我们需要什么参数,就对什么参数进行赋值。
接下来我们对setBizContent里面的参数做一个讲解,哪些是必须的,哪些是非必须的,又代表什么意思

这样一来,所有的参数就整理完了,接下来将一个重要参数,setNotifyUrl,就是回调地址。

首先,我们要明白什么是回调,为什么要回调,什么时候用回调。我们开始讲,支付宝支付三步走,第一,服务端通知支付宝要支付;第二;支付宝同意支付,并返回数据包给服务端,服务端把数据包返回给app前端。第三;app用数据包发起支付请求,完成支付。

那么问题来了,app端支付完成后,我后台怎么才能知道他支付完了,并做出相应的处理呢?

那就是靠回调。也就是说,服务端在第一步通知支付宝进行支付的时候,还留了一个电话号,说,如果app端支付完成了,你给我打电话说他支付完了,我好做下一步处理。那这个电话号就是回调地址。就是app端在拉起支付宝支付完成后,支付宝通过回调地址告诉你支付完了。所以这个回调地址,就是你服务端自己设置的一个能响应的地址。

当然,这里还有一个问题,有小伙伴问了,既然app端支付完了,那他直接告诉我不就行了么,为什么还要回调。小伙子,那就是信任问题了,意思就是,app端可能特么压根没支付,就告诉你支付完了,因为他会说假话,而回调不会,因为人家是收钱的,钱不给,还想让人家配合你说假话,门都没有。所以回调又称为双重验证,验证支付成功。

不过一般为了方便,同时考虑app端是个好孩子的情况下,这里回调地址完全不用写,也就是说,让app端支付完以后告诉你一声就行了,我信你。

设置好参数后,就开始调用实例接口,调用实例接口,很简单,就一句话

调用完实例后,返回值$result,就是支付宝给的加锁数据包,服务端把这个丢给app端就行了。
这里要说明的是,官方sdk里面,调用完有这么一段处理,

听哥的,把这逼玩意删掉,毛用没有。就留着result返回给前端就行。

这里又有人问了,那我们怎么知道我服务端调用实例是成功了还是失败了,哥教你,两步走,
第一:看result值,运行完实例后,打印result值,运行完实例后,打印result值,运行完实例后,打印result的值,你会打印如下内容

如果凡是出现非这个玩意的,那就是错了,出现了类似的,那就是对了
第二:对不对,测试就知道了,借助工具
打开//alipaybbs.oss-cn-hangzhou.aliyuncs.com/1807/thread/60_191_eb31b639a0caf31.zip?spm=a2c6h.12873639.0.0.4d8b6a6ftz7lwG&file=60_191_eb31b639a0caf31.zip这个网站,下载阿里云官方测试apk,安装,安装完就是这么个玩意

然后打开它,


在ok的情况下,把值直接返回给app前端,让他去支付,那就没问题。如果不OK,主要检查下公钥和私钥是否正确,其他没必要检查,都是sdk‘自带的,没啥容易错的。

4.遇到的大坑

本来到这,就结束,支付算是完成了,但是那是因为我用阿里云官方apk测试了,所以最终成功了。那么问题在哪,我们来看一下,
官方文档app前端拉起支付的时候,需要两个参数,

其中一个就是咱们result,也是最主要的一个,但是人家的参数结构要啥,要appid和bizConten两个,看明白没有,啥问题,跟咱们的result,也是最主要的一个,但是人家的参数结构要啥,要appid和bizConten两个,看明白没有,啥问题,跟咱们的result,也是最主要的一个,但是人家的参数结构要啥,要appid和bizConten两个,看明白没有,啥问题,跟咱们的result啥区别,是不是咱们的result最前面的多了一个
标红的这玩意,第一开始以为人家不要呢,就给强制截掉了,但app前端总拉不起支付,报参数异常的错误,后来我用官方apk测试的时候,无意间复制了一个完整的result,结果好使,再返回完整的给前端,也好使,这才发现,原来特么不用截取。但为啥咱们的result会多了个这玩意呢,原来是sdk说明文档跟sdk版本不匹配的问题。以前的sdk版本返回来的result确实没有这玩意,但后来有了,但是文档说明没有更新过来。这,我能不能给支付宝打个电话,让提高一下我的花呗额度…

5.重要的事情说一遍

如果支付宝支付有困难,私信我,V1732474332,PHP和java都可以,谁让咱全栈呢。唉。人美心善

支付宝app支付,订单参数错误/PHP生成支付宝预支付订单/php 支付宝app支付相关推荐

  1. 支付宝支付ALIN10146-商户订单参数错误,请重新支付问题解决

    报错原因 1.请求appid应用未上线或者是应用类型是第三方应用 2.签约权限问题 3.签名类型使用错误 4.请求参数问题 5.秘钥匹配问题 6.应用类型问题 正确请求参数示例如下↓↓↓ alipay ...

  2. 原生支付url参数错误_小程序支付

    下载微信JSAPI支付的 SDK : https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php.zip :解压后放在extend 文件夹 ...

  3. 微信支付提示参数错误

    开发微信支付功能,提示"参数错误", 随后用微信官方的demo代码测试,正常! 再经测试发现SetTotal_fee中的money参数为获取到,是空的.当money变量是固定变量时 ...

  4. php 不重复订单号,php如何生成不重复的订单号,php不重复订单编号

    php如何生成不重复的订单号PHP如何生成重复的订单号,php生成不重复订单号的方法如下:1.利用数据库的主键值生成自增订单号:2.实现"日期自增号"的订单号:3.生成随机订单号: ...

  5. php 不重复订单号,php如何生成不重复的订单号

    php生成不重复订单号的方法:1.利用数据库主键值产生一个自增长的订单号:2.实现"日期+自增长数字"的订单号:3.产生随机的订单号:4.实现"字母+数字字符串式&quo ...

  6. 2022新版彩虹易支付系统源码/运营版/支持当面付/通道轮询/16支付插件/免签约支付系统

    简介: 2022最新版本亲自修改前后台部分文件代码错误问题以及去掉需要别有用心的无用代码的用用户支付平台源码,最新集成16个支付方式接口.11模板支付原版开源源码系统,正版全开源开发文档齐全详细.修复 ...

  7. 2021新版彩虹易支付系统源码/运营版/支持当面付/通道轮询/16支付插件/免签约支付系统

    介绍: 本来这个应该是卖钱的,市面上是没有这一款的.亲自改过的首页模板,,模板是不是很熟悉就是彩虹易支付曾经用过的一个 ,直接扒了并做了下调整,除了这个其他的原封不动.增加防注入模块的安装方法 网盘下 ...

  8. php扫码获取财付通cookie,基于OpenCart 开发支付宝,财付通,微信支付参数错误问题...

    最近在给OpenCart集成支付宝,财付通和微信扫码支付,其实这些插件都是有的卖的,但是还蛮贵的,还是自己开发集成吧,省钱.但是集成过程中发现了一些坑,有opencart的坑,也有支付sdk的坑,浪费 ...

  9. 微信小程序支付返回签名错误_java 微信小程序微信支付统一下订单及数字签名错误问题(后端)...

    今天来分享一下之前做微信小程序微信支付遇到的一些坑,博主这里是微信小程序支付功能,因此选择的微信支付方式是JSAPI支付方式(温馨提示左下角有音乐哦). 首先我们肯定是要在小程序后台绑定一个商户号的, ...

  10. 微信支付,“签名错误,请检查后再试” 的坑爹经历

    微信提交预订单**请求**XML报文: <xml>   <appid><![CDATA[wx45485fdfd5fd5fdfd]]></appid>   ...

最新文章

  1. bcftools合并vcf文件
  2. 论文写作常见错误(1)
  3. Installing EF Power Tools into VS2015
  4. 【数据结构总结】第四章:串、数组和广义表(线性结构)
  5. 方法重载(overload)和方法重写(override)的比较
  6. 【微机原理与接口技术】具体芯片(1)并行接口8255A(1):全局观
  7. SpringMVC报错The request sent by the client was syntactically incorrect ()
  8. IOT(34)---物连网体系结构
  9. 深入理解PHP之数组(遍历顺序)
  10. 【Java与智能设备】ch0501 Intent的使用
  11. 三极管特性——截止区、放大区、饱和区
  12. 云优cms,云优cms程序系统,云优cms分站系统
  13. 系统逻辑架构图怎么画
  14. 《漫步》flash动画制作全记录六
  15. ajax下载Excel文件
  16. html当前页面的脚本发生错误,如何解决“当前页面脚本发生错误”的问题
  17. uc投屏按钮不见了_网页投屏,网页视频怎么投屏到电视,
  18. 深入学习jquery源码之高德地图组件的使用
  19. 异贝,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案推送。案例53
  20. The Shawshank Redemption-3

热门文章

  1. php 如何添加备案号,wordpress如何添加备案信息
  2. 网易蜗牛读书产品分析报告
  3. 1到10加法创新图片-走迷宫_“小火锅+关东煮”,呷哺呷哺又创新模式!客单提到110元!...
  4. 微端要用什么样的服务器
  5. css表格文字超数量就竖排_css实现文字竖排
  6. redis在CentOs服务器上的安装和设置开机自启动
  7. png转ico图标的方法
  8. 阿里云如何设置content-type,微软的在线预览无法使用问题
  9. mysql查询各类课程的总学分_关于SQL练习2的一些写法。。。查询选修人数超过2人且成绩都在60分以上的课程 查询选修张老师讲授所有课程的学生 计算并填写学生获得的总学分...
  10. 如何xp计算机每天定时关机,xp定时关机,教您xp系统怎么设置定时关机