iOS支付宝2.0 SDK集成整理
https://cshall.alipay.com/enterprise/help_detail.htm?help_id=473890
http://wenku.baidu.com/link?url=Wnr_8Qo2rgghWyExknCdL7JTTQJigcGGTn7paW_gq7EdZEz33X72OVExFsEpbnDQpP76DymM4IdmWVqKTWl8mJm2aEcfOBT-iK3bOhRLe0q
支付宝的公众账号文档地址 http://open.alipay.com/index.htm![]()
要开通支付宝的公众账号第一步就是要验证商户网关和开发者公钥的有效性。
文档中忽略了一些细节, 本文进行如下一些细节补充。
支付宝常见问题
http://blog.csdn.net/woaifen3344/article/details/42487115
1、 生成RSA公密钥对
通过openssl生成公密钥对, 在Linux系统下一般默认已有安装:
1、 让openssl随机生成了一份私钥,加密长度是1024位
openssl genrsa -out rsa_private_key.pem 1024
2、 根据私钥生成公钥
openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout
3、 私钥还不能直接被使用,需要进行PKCS#8编码
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -out pkcs8_rsa_private_key.pem -nocrypt
| 去掉头和换行, 公密钥对即可使用了。注意私钥是使用PKCS#8编码的版本。 |
“去掉头和换行” 举例, 例如公钥如下
yulong$ more rsa_public_key.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnlK8+l+YnhRd0SM9p/D2zhxAw
sB9Zpt+mDlyyTSLwYPiBhmhemIvkPYHxllQrTop2GnNr4QuF2tGAw/ds5E5G+GGs
EshN1F5R6rIN2eKk59/nV4f7jzVkV+iq+KfTg8MYAn76PtBUK7TyahnBX4U3Umus
QGiCIhUyJpCOKrq5EQIDAQAB
-----END PUBLIC KEY-----
转成代码中的使用的公钥为:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnlK8+l+YnhRd0SM9p/D2zhxAwsB9Zpt+mDlyyTSLwYPiBhmhemIvkPYHxllQrTop2GnNr4QuF2tGAw/ds5E5G+GGsEshN1F5R6rIN2eKk59/nV4f7jzVkV+iq+KfTg8MYAn76PtBUK7TyahnBX4U3UmusQGiCIhUyJpCOKrq5EQIDAQAB
注意如果公钥是放在XML中配置, 要加上 <![CDATA[]]> 防止XML转义
<property name="PublicKey"><value><![CDATA[${public_key}]]></value></property>
2、 商户网关的应答关键细节
在开启商户开发者模式时, 需要通过验证网关。 支付宝公众账号向配置的网关地址, 发送一个HTTTP POST请求, 商户网站必须要能够正确响应这个HTTP POST请求, 才能完成商户网关的验证。
验证的基本细节参见支付宝文档, 这里提两点文档中没有提及的问题。
首先被加签的内容是如下拼接完成的字符串
"<success>true/false</success><biz_content>开发者公钥</ biz_content>" 进行RSA加签, 可以调用支付宝提供的SDK完成
public void process(Message message, ModelMap modelMap) {
boolean isSuccess=true;
if(message==null || (!config.getAppId().equalsIgnoreCase(message.getAppId()))){
isSuccess=false;
}
String bizContent="<success>"+String.valueOf(isSuccess)+"</success>"+"<biz_content>"
+customerPublicKey+"</biz_content>";
String signResult = AlipaySignature.encryptAndSign(bizContent, alipayPublicKey,
customerPrivateKey, AlipayConstants.CHARSET_GBK, false, true);
modelMap.put("signResult", signResult);
}
config.getAppId() 为商户AppID, 可以在公众账号平台上查询, 是一个数字ID; customerPublicKey为上一节中生成的商户RSA公钥, customerPrivateKey为上一节中生成PKCS#8编码的商户私钥。
signResult 就是准备好的返回给支付宝公众账号平台的XML结果。 AlipaySignature.encryptAndSign 函数会自动拼装反馈XML结果。 两个boolean参数, 表示是否加密, 是否加签。
准备好反馈字符串之后, 还要注意一下细节
public void doPost(ModelMap modelMap, WebRequest request,HttpServletResponse response){
// .... 此处略去前面提的生成XML反馈细节
//要注意设置反馈的HTTP 请求的Head指定为XML格式, 否则XML中的特殊字符会当做HTML发生转义, 造成支付宝公众账号平台无法识别。
response.setHeader("Content-Type", "application/xml");
try {
if(modelMap.containsAttribute("signResult")){
logger.warn("Response: "+(String)modelMap.get("signResult"));
response.getOutputStream().print((String)modelMap.get("signResult"));
}
response.getOutputStream().flush();
} catch (IOException e) {
logger.error("Write Response Error", e);
}
}
iOS支付宝2.0 SDK集成整理的更多相关文章
- (转载)iOS 极光推送SDK 集成指南
iOS SDK 集成指南 使用提示 本文匹配的 SDK版本:r1.2.5 以后. 查看最近更新了解最新的SDK更新情况. 产品功能说明 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能 ...
- iOS开发——百度地图SDK集成
(正在形成文档,待更新……)
- iOS支付宝支付集成
概述 iOS支付宝支付集成 详细 代码下载:http://www.demodashi.com/demo/10729.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧( ...
- BaiduSpeechDemo【百度语音SDK集成】(基于v3.0.7.3)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本Demo将百度语音SDK(其中一部分功能)和自定义的UI对话框封装到一个module中,便于后续的SDK版本更新以及调用. 本De ...
- BaiduSpeechDemo【百度语音SDK集成】(基于v3.0.8.1)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 上一篇集成的是V3.0.7.3版本的SDK<BaiduSpeechDemo[百度语音SDK集成](基于v3.0.7.3)> ...
- 手把手教你搞定个推iOS推送SDK集成
以下是一位开发者在集成个推iOS推送SDK过程中的真实经历. 作者:Ezreallp 一次偶然的机会,公司的项目要用到推送,我自己本来就很懒,不愿意去弄整套APNS的流程,刚好之前跟朋友聊起过他们的产 ...
- Android消息推送 SDK 集成指南
使用提示 本文是 Android SDK 标准的集成指南文档. 匹配的 SDK 版本为:r1.8.0及以后版本. 本文随SDK压缩包分发.在你看到本文时,可能当前的版本与本文已经不是很适配.所以建议关 ...
- UmengShareDemo【友盟分享SDK集成,基于V6.9.3版本】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里简单记录下友盟分享SDK集成的步骤. 如果想要使用自定义分享对话框实现,请参考<ShareDialogDemo[分享对话框 ...
- 一、Microsoft Dynamics CRM 4.0 SDK概述
Chapter 1. Microsoft Dynamics CRM 4.0 SDK Overview(SDK概述) You are probably reading this book because ...
随机推荐
- light oj 1084 线性dp
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> ...
- 微信小程序上传图片(附后端代码)
几乎每个程序都需要用到图片. 在小程序中我们可以通过image组件显示图片. 当然小程序也是可以上传图片的,微信小程序文档也写的很清楚. 上传图片 首先选择图片 通过wx.chooseImage(OB ...
- Maven实战05_背景案例学Maven模块化
1:简单的账户注册服务 注册互联网账户是日常生活中再熟悉不过的一件事,作为一个用户,注册账户的时候需要进行以下操作,提供以下信息. 提供一个未被使用的帐号ID 提供一个未被使用的email地址. 提供 ...
- python第四课
1.lambda()函数 可以直接定义一个函数,简化用def的定义. >>> func=lambda x,y:x+y>>> print(func(3,4))7> ...
- 【One by one系列】一步步部署.net core应用
我们的目标: CentOS系统 nginx服务器 asp.net core应用 mysql服务器 腾讯云服务器 工具准备 [Xshell]--使用windwos下的工具Xshell,原理就是使用SHH ...
- oracel 管理维护
共享池中的缓存: 绑定变量是一种优化执行的方式. lgwr 重做日志进程dbwr 数据写进程smon 系统监督进程pmon 进程监督进程ckpt 校验点进程 arch 归档日志进程 spool 命令可 ...
- TZOJ 5986 玄武密码(AC自动机)
描述 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神灵将天书藏匿在此. 很多年后,人们终于在 ...
- Linux User and Group Management
linux is a multi-user and multitasking OS. In Linux, you can create any number of user account and g ...
- 玩转webpack之webpack的entry output
webpack的入口配置项表示要配置的文件就是开发环境或者生产环境 浏览器本身不能认识的一些东西必须经过webpack的编译才能认识,但是要去写的时候我们经常用到预编译什么的比如scss比如jsx甚至 ...
- Java review-design pattern
Design Patterns (Factory, Abstract Factory, singleton, DAO, Proxy): 1. Factory: In Factory pattern, ...