https://cshall.alipay.com/enterprise/help_detail.htm?help_id=473890

http://wenku.baidu.com/link?url=Wnr_8Qo2rgghWyExknCdL7JTTQJigcGGTn7paW_gq7EdZEz33X72OVExFsEpbnDQpP76DymM4IdmWVqKTWl8mJm2aEcfOBT-iK3bOhRLe0q

支付宝公众账号商户网关的搭建, RSA密钥对生成

支付宝的公众账号文档地址 http://open.alipay.com/index.htm

要开通支付宝的公众账号第一步就是要验证商户网关和开发者公钥的有效性。

https://openhome.alipay.com/doc/docIndex.htm?url=https://openhome.alipay.com/doc/viewKbDoc.htm?key=236714_422556&type=info

文档中忽略了一些细节, 本文进行如下一些细节补充。

支付宝常见问题

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集成整理的更多相关文章

  1. (转载)iOS 极光推送SDK 集成指南

    iOS SDK 集成指南 使用提示 本文匹配的 SDK版本:r1.2.5 以后. 查看最近更新了解最新的SDK更新情况. 产品功能说明 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能 ...

  2. iOS开发——百度地图SDK集成

    (正在形成文档,待更新……)

  3. iOS支付宝支付集成

    概述 iOS支付宝支付集成 详细 代码下载:http://www.demodashi.com/demo/10729.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧( ...

  4. BaiduSpeechDemo【百度语音SDK集成】(基于v3.0.7.3)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本Demo将百度语音SDK(其中一部分功能)和自定义的UI对话框封装到一个module中,便于后续的SDK版本更新以及调用. 本De ...

  5. BaiduSpeechDemo【百度语音SDK集成】(基于v3.0.8.1)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 上一篇集成的是V3.0.7.3版本的SDK<BaiduSpeechDemo[百度语音SDK集成](基于v3.0.7.3)> ...

  6. 手把手教你搞定个推iOS推送SDK集成

    以下是一位开发者在集成个推iOS推送SDK过程中的真实经历. 作者:Ezreallp 一次偶然的机会,公司的项目要用到推送,我自己本来就很懒,不愿意去弄整套APNS的流程,刚好之前跟朋友聊起过他们的产 ...

  7. Android消息推送 SDK 集成指南

    使用提示 本文是 Android SDK 标准的集成指南文档. 匹配的 SDK 版本为:r1.8.0及以后版本. 本文随SDK压缩包分发.在你看到本文时,可能当前的版本与本文已经不是很适配.所以建议关 ...

  8. UmengShareDemo【友盟分享SDK集成,基于V6.9.3版本】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里简单记录下友盟分享SDK集成的步骤. 如果想要使用自定义分享对话框实现,请参考<ShareDialogDemo[分享对话框 ...

  9. 一、Microsoft Dynamics CRM 4.0 SDK概述

    Chapter 1. Microsoft Dynamics CRM 4.0 SDK Overview(SDK概述) You are probably reading this book because ...

随机推荐

  1. 关于自定义 UITableViewCell

    自定义UITableViewCell的方法有很多 发现一些人都会遇到自己定义的cell里面图片错乱的问题 这个问题往往是因为没有实现prepareForReuse这个方法导致的. UITableVie ...

  2. 清除样式的css

    html, body, div, ul, li, h1, h2, h3, h4, h5, h6, p, dl, dt, dd, ol, form, input, textarea, th, td, s ...

  3. Ceisum官方教程2 -- 项目实例(workshop)

    原文地址:https://cesiumjs.org/tutorials/Cesium-Workshop/ 概述 我们很高兴欢迎你加入Cesium社区!为了让你能基于Cesium开发自己的3d 地图项目 ...

  4. jsonp 请求报Uncaught SyntaxError: Unexpected token :

    $(document).ready(function() { jQuery.ajax({ type: 'GET', url: 'http://wncrunners.com/admin/colors.j ...

  5. std::map插入失败会返回什么

    总所周知,map不能存在2个相同的key,那么如果是后插入的key,对应的value不会添加上去,也不会覆盖原来的,此时会返回一个std::pair<iterator,bool>,可以根据 ...

  6. linux 三剑客命令(grep,sed ,awk)

    grep 命令 :强大的文本’搜索’工具    1.grep   -n   'word'  file_name 在file_name文件中找到word所在的所有行并显示.-n 为显示行号.     2 ...

  7. phpSpider 单页测试_模拟登陆

    <?php require './vendor/autoload.php'; use phpspider\core\phpspider; use phpspider\core\requests; ...

  8. Django项目:CRM(客户关系管理系统)--49--40PerfectCRM实现全局账号注册+验证码+页面刷新保留信息

    # gbacc_urls.py # ————————38PerfectCRM实现全局账号登录注销———————— from django.conf.urls import url from gbacc ...

  9. 实时查看linux网卡流量 的base脚本

    #!/bin/bash " ] do eth=$ RXpre=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{pri ...

  10. win10 下安装docker,创建镜像,push镜像到私有仓库,创建私有仓库,修改镜像仓库地址

    通过连接下载window docker安装文件,https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.ex ...