支付宝接入教程以及服务端给app写支付接口入门(2)

2019-04-21 17:50

好,我们此时看下请求参数文档会发现一个配置项是demo中缺少的! 请求参数文档地址:

https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103663&docType=1 我们对比配置文件,发现

也就说,demo的示例中少了seller_id这个必要参数!大家自己加上。seller_id的值是商家的支付宝账号!

在配置文件中,有两个参数需要注意private_key和alipay_public_key 这个应该是最近修正的写法。你会发现在之前的写法中是

也就是说,这个地方可以写公私钥的路径也可以写具体的公私钥内容,再次要注意的是:公私钥的格式!!用官方提供的openssl工具进行生成的私钥是保存到本地的,公钥用于上传并换取支付宝公钥,且存到本地,上传修改的位置是合作伙伴密钥(之前有讲过!!)如果曾经在网页上有支付宝支付,那么当时的私钥和支付宝公钥是可以再次使用的!无需修改!

配置项要说明的基本也就是这些,其他的都无需变动!

接下来就是服务端要集成demo的重头戏了,那就是生成签名操作

之前官方并没有给出明确的文档,说的也是相当模糊,写此文时候官方已经有文档解释。 附录文档地址:

https://doc.open.alipay.com/doc2/detail.htm?treeId=59&articleId=103927&docType=1 看过它的文档还有些迷糊的话,请看如下我真实程序下的步骤过程: 在传递的接口文件中需要引入

写过接口的人都应该很清楚,只要给接口传递一个orderid就可以知道此订单的购物情况。那么接下来要进行的签名过程,和要给客户端发送的数据请严格按照下列代码进行!! //先根据部分参数(订单信息)获取签名 $signParameter = array(

\\\\\\

\\

\\);

//获取预签名字符串

$strSign=createLinkstring($signParameter); //调用RAS加密函数获取加密串

$result=rsaSign($strSign,$alipay_config['private_key_path']); //将完整的信息发给客户端 $parameter = array(

\\\\\\

\\

\\\

\);

$payinfo=createLinkstring($parameter);

exit('{\看到exit里面的result会发现json_encode_ex这个函数,此函数为我自己为转换json_encode函数中文转码所写,实际上的写法是json_encode($payinfo)但是里面的中文全部被转换了。而支付宝的参数要求,明确要求,原码传递中文,文字是什么样的就是什么样的! /* *

* 对变量进行 JSON 编码

* @param mixed value 待编码的 value ,除了resource 类型之外,可以为任何数据类型,该函数只能接受 UTF-8 编码的数据

* @return string 返回 value 值的 JSON 形式 */

function json_encode_ex( $value) { if ( version_compare( PHP_VERSION,'5.4.0','<')) { $str = json_encode( $value); $str = preg_replace_callback( \ function( $matchs) { return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1])); }, $str ); return $str; } else { return json_encode( $value, JSON_UNESCAPED_UNICODE); } }

上面说到了流程,下面稍微说一下对支付结果的处理:

支付的结果处理有两种方式:一个是同步通知,一个是异步通知(一定要明确自己用的是异步请求还是同步请求!Return_url是同步,notify_url是异步,选择其中之一!)

我个人建议使用异步通知(习惯而已)

异步通知的url,无论是在APP支付还是网站支付中都形如notify_url,大家可以自己定位查询下,下面以为app写接口为例说明下notify_url。

打开下载的服务端demo,我们会看到一个文件,notify_url.php,此文件就是异步通知的文件,异步通知回来后, 服务端就要根据异步的结果,去处理自己的程序逻辑,比如修改订单状态。

业务逻辑的处理,我见过有人写在0的位置,也有人写在1的位置,我个人是写在了1的位置。

当此时,一个完整的支付基本就写完了,关于支付的调试,其实支付宝是提供了 一个方法的。异步回来的结果是要再次进行验签的,基本上支付是否成功,就在验签的方法中得以体现,也就是说一些异步回来的信息,在验签的方法中是可以调试打印的!!

进到verifyNotify方法(如果用的是同步通知这个方法是verifyReturn())中我们可以看到

没错!!logResult就是支付宝提供的打印返回异步通知参数的方法(此方法写入的log.txt

大家可以自己改路径)。通过这个你就很明显知道,订单到底成功还是没成功!

从上述的日志很容易就知道,客户端吊起支付之后出现的一些问题是怎么来的,哪里的问题! 好了,洋洋洒洒这么多,终于给一个完整的支付讲述完毕。实际开发中还需要大家多揣摩,多测试,多想多总结。

附录常见的问题错误总结(不尽之处大家自己总结积累)

A.用demo来实现支付时出现的常见代码以及排查解决方法

注意:用手机网站支付demo或移动支付服务端demo调用的时候一般用的是合作伙伴密钥

ILLEGAL_SIGN获取签名时候拼装的参数有问题,检查顺序,对照文档必传项。

ALI38173 合作伙伴密钥或者开放平台密钥中上传的公钥,跟本地保存的私钥不是成对匹配的!重新生成公私钥,私钥存本地,公钥上传换取支付宝公钥!(一定要记住公私钥都要存在本地作为备份,包括换取的支付宝公钥要做备份!)

B.用SDK调用API来实现支付时出现的常见代码以及排查解决方法

错误代码 invalid-signature 错误原因: 无效签名

上述的方法包裹json的时候必须是双引号

错误代码 missing-signature 错误原因: 缺少签名参数 私钥和公钥不成对匹配

LI38173 1.业务参数不全 2.开放平台密钥中上传的公钥,跟本地保存的私钥不是成对匹配的!重新生成公私钥,私钥存本地,公钥上传换取支付宝公钥


支付宝接入教程以及服务端给app写支付接口入门(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:无锡绿城玉兰西花园三期1-8#房工程监理巡视、旁站,平行检查方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: