热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

支付宝服务窗接入常见问题说明

近日将一产品接入支付宝服务窗,接入过程遇到几点磕绊,记下也为后来者有所借鉴。支付宝服务窗无论界面到技术接入,同微信公众号相似度还是比较高的

近日将一产品接入支付宝服务窗,接入过程遇到几点磕绊,记下也为后来者有所借鉴。支付宝服务窗无论界面到技术接入,同微信公众号相似度还是比较高的,做过公众号接入的,服务窗接入就是轻车熟路了。


接入前的准备工作:

1.申请开发资质.就是填写企业身份信息然后等待审核,这里不做赘述

2.生成服务窗应用的公钥,私钥。可以与app 支付共用一套证书。填写应用公钥时用一个应用公钥填写就可以了。证书生成过程还是比较简单的,要注意在支付宝后台填写的是公钥证书


常见问题:


一.与支付宝互相交换公钥

.地址:https://openhome.alipay.com/platform/keyManage.htm

2YLPQ6T%S0Y[WOZ@EPW]4HW

如上图所示,

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

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


二.需激活开发者模式

服务窗应用需激活开发者模式后 ,才可以使用。
2.1. 下载服务端sdk:https://fuwu.alipay.com/platform/doc.htm#c1101
部署至服务器。
修改config.php 里面的app_id , 替换对应的支付宝公钥证书,应用的公私钥(可以与app支付公用 的)。
2.2  激活网关  https://openhome.alipay.com/platform/appDetail.htm?tab=appSetting&appId=(你的应用id)

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


96ZTY}N$~S7S%68O80Y@)14支付宝服务窗应用网关填写说明
应用网关 :demo里面的Gateway.php 的地址,部署的服务器需要外网可访问的。

应用公钥 (RSA):openssl 生成的公钥证书 (这里我用的是app支付的公钥证书)。



2.3 验证通过后,公众号的用户事件就可以发送到应用网关了。例如:订阅事件、消息事件等等.

注意:
1.在红色对话框里面填写的公钥要过滤:
1.—–BEGIN PUBLIC KEY—– , —–END PUBLIC KEY—–
2. 过滤掉 回车(0x0D,0x0A )、空格。
Gateway.php 响应的xml response_xml会读取本地公钥内容进行过滤,并把过滤内容放在响应的xml,biz_content节点发给支付宝。支付宝会用biz_content 与 网页填写的公钥进行签名比对。不相等就会返回错误 :填写的公钥 与服务器返回的不一致。


3.访客身份ID获取:


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

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

这种方式必须需要用户授权,可以获取更多的用户信息,例如包含加星的用户账号及加星的用户名。如果仅仅是想获取访客的身份ID,那么推荐使用第二种。

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

2种方式本质上都是通过js 将访客跳转至支付宝一api,支付宝会对用户进行身份认证,通过后将用户认证信息(auth_code)的附加在url上跳转回到redirect_uri 定义的url上。获取到用户的auth_code后就可以进一步获取用户的OpenId或更多信息了。

需要说明的是,这2种方式都不能获取支付宝访客头像(咨询了技术客服得到的答案)。

参考文档:https://fuwu.alipay.com/platform/doc.htm#c0205


四.签名失败问题:

4.1 支付宝服务器向应用网关推送消息时,如果使用官方demo时,特别要注意网关回调url不要使用动态参数地址,例如http://xytong.cc/pay?type=alipay 这种格式是通不过签名验证的。原因是gateway.php 的验证函数传参有问题,见如下代码:

rsaCheckV2 ( $_REQUEST, $config ['ali_fwc_public_key_path'] );

参数验证本来验证post数据就可以了,如果回调url 有动态参数,就会把get参数也传入进行计算签名,结果当然是签名验证失败.官方这样写,有画蛇添足之嫌.

解决方法:

方法1.使用静态url  例如:http://xytong.cc/pay/alipay

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

rsaCheckV2 ( $_POST, $config ['ali_fwc_public_key_path'] );

来源:http://xytong.cc/archives/52


推荐阅读
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Firefox火狐浏览器关闭到http://detectportal.firefox.com的流量问题解决办法
    本文介绍了使用Firefox火狐浏览器时出现关闭到http://detectportal.firefox.com的流量问题,并提供了解决办法。问题的本质是因为火狐默认开启了Captive portal技术,当连接需要认证的WiFi时,火狐会跳出认证界面。通过修改about:config中的network.captive-portal-service.en的值为false,可以解决该问题。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
author-avatar
bluelucky2012
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有