创建支付宝生成支付订单失败败[ACQ.SECONDARY_MERCHANT_STATUS_ERROR][受理商户状态异常]?

          最近在项目中接入了微信支付和支付宝支付,总的来说没有那么坑,很多人都说文档不全什么的,确实没有面面

到,但是认真一步一步测试下还是妥妥的,再配合懂得后台,效率也是很高的,看了这篇文章,你也只要几分钟,

就能轻松接入支付宝,在别人投来崇拜的眼光的同时,你就能潇洒的回一句,略懂略懂。。。。。。

先给大家我写的微信支付,很详细哦,喜欢的点个赞

支付宝同一订单号产生多个不同out_trade_no的问题,同步状态码是否要post给服务器的问题已经更新在了上面微信支付的文章中,需要的去看吧

首先商户要去支付宝申请,得到一个parnter和seller,然后在电脑上生成一组RSA,公钥给支付宝,私钥自己流程,具

体流程我不BB了,自己看,主要这些东西我们App也不需要怎么管理,大家随意看看知道下

3.加密用到的文件(私钥自己做,支付宝公钥)

这里SDK的文档只有最近一次更新的,没记错的话2016年Alipay有一次重大的改动,我这有一份很全的更新文档,朋

友给我的,需要注意的在最后给大家分析,这里只需要先下载下来,看看里面的代码,然后把需要的东西准备下,继

续往下分析,其实还有一个用处,就是把你生成的**和seller和parnter给填进去,跑一下,看能不能拉起来,但是

正常情况下是不需要这么搞得,后台处理的,项目的时候也不需要我们App做的,所以还是往下看

为什么手动呢,因为不支持cocoapods,又不是第三方的,这种还是自己接入安全点。

把四个箭头的文件拖进去,记得文件夹拖进去是选择Create Group,其实这四个文件是为了签名在客户端签名而存在

的,实际项目中,我们是要把私钥保存在自己的服务器,然后服务器进行支付订单参数的签名,返回给客户端,我还

是放到自己项目中了,毕竟其他地方也要用到,要是在服务器签名order文件就不要拉进来了

如果原本项目中的根目录中有以下prefix文件,例如

如果不存在,那么直接把支付宝Demo里面的prefix文件拖到自己项目的根目录下,最好改下文件名,然后配置路径

然后根据下图添加库文件

貌似这两个也要加上,那就加进去吧

如果是自己Demo本地签名,不是服务器签名,那么再设置下openssl的路径

网上找了个相对路径和绝对路径的文章

配置URL Scheme,主要就是回调的时候能拉起App,这里的Scheme千万不能乱用,也别重复了,不然怎么都拉

不起来了,我就遇到过一次,和微信拉起App重复了,导致很尴尬,咱们保持唯一就好了,也就是给咱们自己的项目

增加个标识符,能够让支付宝回调拉起来

这里就是根据上面的配置,在本地进行签名,拉起支付宝,需要的朋友直接下载Demo看吧,没什么好讲的,因为支

付宝都强调了不要在本地玩,不过你想玩,那就玩吧,后果自负

来来来,组装完毕,正式项目接入流程点火起飞

如果起飞有问题,可能我上面漏了什么,记得留言给我哦(写代码记得包头文件)

传订单号给自己的服务器签名,再提一次,千万别再本地写,你和后台定好规则,传需要的订单字符串给他,他把签

// 订单的“,”分割字符串 支付宝只是传签名,不需要再次校验,微信成功之后没有返回值,所以微信支付需要保存到沙盒

关键代码,拉取服务器的签名参数,然后传给支付宝拉起支付 (这里的block处理的是没有支付宝的时候走H5收银台的回调)

// 订单拿去给服务器签名 // 拉起支付宝,2016年5月之后更新是H5回调到这里 //9000 订单支付成功 正常流程会进入这里 如果中断了就去外面delegate那里的Block // 匹配不到就上报异常 // 弹出失败的界面,弹出之后的话就不支付界面消失,方便重新支付

介绍下支付宝对我来说影响最大的一次

首先看看官方的调用接口,根据图来讲,我们就说方法1和方法2了,各位懵逼的就看图指示

再来看看2016年5月份更新的文档

看了这两次的介绍和图,简单来说就是原本方法1和方法2实现的情况下,方法1存在的情况下,结果返回给方法1的

block,方法1不存在,那么久回调到方法2的回调

唯一存在的用户操作就是,当你支付拉起支付宝的时候,你的商户App自杀了或者你手贱把他退出了,那么,你的方

法1自然就没了,你就需要方法2来进行回调结果的通知

我感觉更正常了点了,但是咱们得改改代码逻辑啊,方法1和方法2都实现了,方法1只负责当没有支付宝客户端的时

候,走H5收银台,进行支付,结果处理回调,方法2就处理有客户端的情况下的回调,这里亲自测试,当拉起支付宝

的时候,你手贱退出了,也是回调到方法2的block里面进行结果反馈

我已经更新SDK到最新了,而且我这里介绍的也是最新,就是改版之后的方法,老的不介绍了,理论上都要用最新的

嘛,如果你用旧的,那我也没办法

处理支付结果(有支付宝的情况下回调该方法)

// 当用户通过其它应用启动本应用时,会回调这个方法,url参数是其它应用调用openURL:方法时传过来的
 //跳转支付宝钱包进行支付,处理支付结果,该方法是当去支付的时候我的进程被杀死的时候调用这里的回调,不然就调用payorder的回调
 
 // 支付完成需要把返回的outtradeID给解析出来,给服务器二次确认
 // 匹配不到就上报异常
 
 //8000 正在处理中 4000 订单支付失败 6001 用户中途取消/重复操作取消 6002 网络连接出错
 
这里有个iOS 9的API,反正没什么卵用





和微信支付一样,我们不能直接用同步返回的结果来判断是否正真支付成功()


按照官方的说法请看如下


好在支付宝和微信支付不同的地方在于,支付宝的返回数据中有带订单信息,我们就直接解析可以了,不需要像微信


一样只返回状态码,我们需要本地存起来,再和服务器二次校验








这个问题按照步骤三里面的介绍配置下pch文件就好了,在base64.h中包含缺少的头文件就搞定了

这个问题就是步骤五提到的了,如图解决

其实,你只要按我的步骤来,交给服务器签名,做我们App该做的事,基本就没有什么问题

1.导入Demo中框架,相关库,配置pch文件以及openssl文件路径

4.注意改版前后的回调机制,最好保持最新的,最新的逻辑更清晰

5.和微信一样,同步返回的结果记得二次确认,和后台约定好解析字段


1.熟悉支付宝对接核心文档,调通支付宝支付功能官方Demo网络

2.解析支付宝SDK对接源码app

3.RSA1和RSA2验证签名及加解密异步

4.避免支付宝重复通知和数据校验工具

6.生成二维码,并持久化到图片服务器

7.支付宝回调,会放在request中,再从request中取出来,放在map中,再对map进行处理,打印的日志就是map中的内容

入参:orderNo,要支付的订单号

返回值:将持久化到ftp服务器上的二维码(经过nginx反向代理解析出来的url)和orderNo返回

入参:orderNo,要查询的订单号

用户付款后,收到支付宝确认成功的一个回调,就能够实时查到这个订单是否已经付款成功。

2.沙箱环境使用说明和如何使用沙箱环境

3.当面付产品介绍、扫码支付接入指引、当面付快速接入、当面付接入必读、当面付进阶功能、当面付异步通知-仅用于扫码支付、当面付SDK&DEMO

受权回调地址:线上url,这里我是申请了的nat,在咱们发起请求时,要把这个url做为参数传给服务器。

AES密钥:在传输数据时,进行加密,支付宝经过AES密钥,对数据进行解密。

内部生成一个订单号,即选完商品后提交订单的那个操做;而后向支付宝请求预下单信息,里面包括外部订单号(out_trade_number,是针对支付宝来讲的,但实际上是咱们的内部订单号)、验签、公钥等;而后,支付宝返回二维码信息(http协议的信息),拿到信息后能够利用工具生成二维码,以base64的方式传给前端,或以图片的形式持久化到ftp服务器,而后以http协议(nginx反向代理)的形式传给前端;支付宝钱包扫码后,会收到两次支付宝回调信息,第一次是支付宝返回的支付详情,第二次是在输入完密码后的帐单详情。

支付宝扫码支付重要的字段:

用户订单号,须要保证不重复
本次交易支付的订单金额,单位为元
商家在交易中实际收到的款项,单位为元
用户在交易中支付的金额,单位为元
交易建立,等待卖家付款
未付款交易超时关闭,或支付完成后全额退款

支付宝扫码支付重要细节:

1.主动轮询和回调的区别

3.同步请求的加签和验签

加签方法(若是不用SDK调用,推荐用该方法加签):

params 请求支付宝生成订单时的参数,参数列表,key是参数名称,value是参数值

验签方法(同步请求时,若是不用SDK调用,推荐用该方法验签):

4.回调的验证(签名、金额、订单号、订单状态、交易状态、商户id)

6.必定要验证并确保可接受的异步通知是支付宝发出的

验签方法(例如异步通知的时候,用户须要用到验签方法):

params 支付宝的回调参数,参数列表(包括待验签参数和签名值sign),key是参数名称,value是参数值 charset 验签字符集,统一用utf-8
   返回boolean类型,根据这个来判断是否接受这个异步通知

商城给支付宝的返回数据。给支付宝返回时,应在response中把"success"放进去,返回的规则:

程序执行完后必须打印输出"success"(不包含引号),若是商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟,通常状况下,25小时内完成8次通知。(通知的间隔频率通常是:4m,10m,1h,2h,6h,15h)。

支付宝扫码支付对接技巧:

支付宝怎么调到我,由于支付宝是在网络中的,因此至少我应该是能够上外网的。因此有如下几种方案:

1)路由器设置开放本地到外网(不推荐)

2)外网远程debug:例如当前商城部署在阿里云上,阿里云对外是有一个固定的ip或域名,回调地址设置成阿里云的这个服务器,而后保证本地代码和阿里云上的代码是一致的,而后开放一个远程debug的端口,在本机进行远程debug。这样在支付宝送回请求时,能够在本地进行debug。注意:(1)保持远端代码版本和本地代码保持一致。(2)及时关闭开放的debug端口。

经过这个natapp软件,能够获得一个外网能够访问的域名,访问这个域名与访问本机是同样的。

我要回帖

更多关于 生成支付订单失败 的文章

 

随机推荐