找回密码
 立即注册
搜索
查看: 2|回复: 0

接入支付宝服务窗遇到这些磕绊?快来看看怎么解决

[复制链接]

6279

主题

0

回帖

1万

积分

管理员

积分
18907
发表于 昨天 23:55 | 显示全部楼层 |阅读模式
近期,我们成功将一款产品与支付宝服务窗进行了对接,但在接入过程中遇到了一些挑战,这些经验教训可供后来者参考。支付宝服务窗在界面设计和技术对接方面,与微信公众号的相似度相当高,对于那些有过公众号对接经验的人,服务窗的接入过程可谓是得心应手。

接入前的准备工作:

申请获取开发资质的过程涉及提交企业相关信息,并经历审核阶段,这一步骤的具体细节此处不予详述。

创建服务窗口应用的公钥与私钥,这两者可以与APP支付功能共享同一套证书。在填写应用公钥时,只需使用一个应用公钥即可。证书的生成流程相对简便,但需留意在支付宝的后台操作中应正确填写公钥证书。

常见问题:  一.与支付宝互相交换公钥

.地址:

如上图所示,

“查看应用公钥” 即可填写自己应用的公钥.

“查看支付宝公钥” ,将支付宝公钥放到你的项目中。

二.需激活开发者模式

服务窗应用需激活开发者模式后 ,才可以使用。

2.1. 下载服务端sdk:

部署至服务器。



在修改.php文件时,需将逗号符号替换为相应的支付宝公钥证书,同时更新应用的公钥和私钥(这两者可以与app支付共用的)。

2.2 激活网关 (你的应用id)

应用网关 那一栏,激活弹出如下对话框 。

支付宝服务窗应用网关填写说明

应用网关中的demo部分,其.php文件的地址,必须部署在服务器上,且该服务器必须能够被外网访问。

采用公钥加密技术(例如RSA算法),能够生成相应的公钥证书,在此过程中,我所使用的是适用于app支付的公钥证书。

经过验证确认无误后,公众号中的用户相关事件便能够被传输至应用网关。这包括但不限于订阅事件、消息事件等。

注意:

1.在红色对话框里面填写的公钥要过滤:

1.—–—–,—–—–

2.过滤掉回车(0x0D,0x0A)、空格。

对于.php的响应,系统将读取并筛选本地的公钥信息,随后将这些筛选后的内容嵌入到响应的XML文件中,并通过特定节点发送给支付宝。支付宝将利用网页上填写的公钥进行签名验证,若发现签名不匹配,即填写的公钥与服务器返回的公钥不一致,系统将返回错误信息。

3.访客身份ID获取:

支付宝服务窗提供了2种方式获取用户信息:



1.用户访问授权页面,并且授权成功。

此方法实施需用户同意,进而能够收集更全面的用户资料,诸如标注过的账户和用户名等。若仅是为了获取访客的唯一标识,则建议考虑采用其他方案。

2.获取用户。 使用 可以获取到即为用户的永久标识ID。

两种方法在本质上都利用将访客导向支付宝指定的API,支付宝将执行用户身份的验证。验证成功后,用户的认证信息会被附加到URL中,随后跳转回事先设定的URL。这样一来,我们便可以获取用户的相关信息,甚至更多的资料。

需要指出的是,这两种途径均无法获取支付宝访客的头像信息(这是通过咨询技术客服所获得的答复)。

参考文档:

四.签名失败问题:

在使用官方demo进行支付宝服务器向应用网关推送消息时,务必留意网关回调url的设置,避免采用包含动态参数的地址。例如,以下这种格式的地址是无法通过签名验证的。其原因是.php验证函数在传参时存在缺陷,具体代码如下:

<p><pre class="pure-highlightjs" style="font-size:16px; font-family:Inconsolata,monospace; border:none; line-height:1.3125; margin-top:0px; margin-bottom:1.75em; max-width:100%; overflow:auto; padding:0px; white-space:pre-wrap; word-wrap:break-word; background-color:rgb(255,255,255); color:rgb(26,26,26)">    <code class="hljs nginx" style="font-size:1em; font-family:Inconsolata,monospace; background:rgb(240,240,240); padding:0.5em; display:block; overflow-x:auto; color:rgb(68,68,68)"><span class="hljs-attribute" style="font-weight:bold">rsaCheckV2</span> ( <span class="hljs-variable" style="color:rgb(188,96,96)">$_REQUEST</span>, <span class="hljs-variable" style="color:rgb(188,96,96)">$config</span> [<span class="hljs-string" style="color:rgb(136,0,0)">禁止对'ali_fwc_public_key_path'进行修改。</span>] );</code></pre></p>
参数验证只需针对POST数据进行即可,但若回调URL中包含动态参数,便会将GET参数一并纳入签名计算之中,导致签名验证必然不通过。官方的表述,似乎有过度装饰之嫌。

解决方法:

方法1.使用静态url 例如:

方法2.修改官方demo代码,把$ 修改为$_POST.

<p><pre class="pure-highlightjs" style="font-size:16px; font-family:Inconsolata,monospace; border:none; line-height:1.3125; margin-top:0px; margin-bottom:1.75em; max-width:100%; overflow:auto; padding:0px; white-space:pre-wrap; word-wrap:break-word; background-color:rgb(255,255,255); color:rgb(26,26,26)">    <code class="hljs nginx" style="font-size:1em; font-family:Inconsolata,monospace; background:rgb(240,240,240); padding:0.5em; display:block; overflow-x:auto; color:rgb(68,68,68)"><span class="hljs-attribute" style="font-weight:bold">rsaCheckV2</span> ( <span class="hljs-variable" style="color:rgb(188,96,96)">$_POST</span>, <span class="hljs-variable" style="color:rgb(188,96,96)">$config</span> [<span class="hljs-string" style="color:rgb(136,0,0)">&#39;ali_fwc_public_key_path&#39;</span>] );</code></pre></p>
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|【远见科技】 ( 京ICP备20013102号-58 )

GMT+8, 2025-5-17 16:03 , Processed in 0.106856 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表