支付宝接入参考链接:https://software.intel.com/zh-cn/node/542608

银联接入参考链接:http://blog.csdn.net/gf771115/article/details/41935683

         

银联支付相关问题记录:

1、我们看文档知道客户端使用银联(Android、IOS)需要有一个获取TN的接口。

2、我们来看银联支付返回回来的逻辑。代码如下:

  /*
* 支付控件返回字符串:success、fail、cancel 分别代表支付成功,支付失败,支付取消
*/
String str = data.getExtras().getString("pay_result");
if (str.equalsIgnoreCase("success")) {
// 支付成功后,extra中如果存在result_data,取出校验
// result_data结构见c)result_data参数说明
if (data.hasExtra("result_data")) {
String result = data.getExtras().getString("result_data");
try {
JSONObject resultJson = new JSONObject(result);
String sign = resultJson.getString("sign");
String dataOrg = resultJson.getString("data");
// 验签证书同后台验签证书
// 此处的verify,商户需送去商户后台做验签
boolean ret = RSAUtil.verify(dataOrg, sign, mMode);
if (ret) {
// 验证通过后,显示支付结果
payStatus(true);
} else {
// 验证不通过后的处理
// 建议通过商户后台查询支付结果
payStatus(false);
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
// 未收到签名信息
// 建议通过商户后台查询支付结果
payStatus(true);
}
} else if (str.equalsIgnoreCase("fail")) {
payStatus(false);
} else if (str.equalsIgnoreCase("cancel")) {
payStatus(false);
}
}

  我们看代码的第16行,我们看到在pay_result返回success后,还需要将证书与后台的商户进行验签。这个逻辑应该是最近版本的银联加上的。我看过老版本的没有这一步。测试的时候支付成功后,我们发现验证不通过,所以还是显示支付失败。那么显然是verify方法中的哪一步出现了问题。我们跟下去,看到了下面的代码:

 public static PublicKey getPublicKeyProduct() {
// 请将此处的module换成生产环境商户验签的公钥模数
//String modulus = "24882698307025187401768229621661046262584590315978248721358993520593720674589904440569546585666019820242051570504151753011145804842286060932917913063481673780509705461614953345565639235206110825500286080970112119864280897521494849627888301696007067301658192870705725665343356870712277918685009799388229000694331337917299248049043161583425309743997726880393752539043378681782404204317246630750179082094887254614603968643698185220012572776981256942180397391050384441191238689965500817914744059136226832836964600497185974686263216711646940573711995536080829974535604890076661028920284600607547181058581575296480113060083";
String modulus="24882698307025187401768229621661046262584590315978248721358993520593720674589904440569546585666019820242051570504151753011145804842286060932917913063481673780509705461614953345565639235206110825500286080970112119864280897521494849627888301696007067301658192870705725665343356870712277918685009799388229000694331337917299248049043161583425309743997726880393752539043378681782404204317246630750179082094887254614603968643698185220012572776981256942180397391050384441191238689965500817914744059136226832836964600497185974686263216711646940573711995536080829974535604890076661028920284600607547181058581575296480113060083";
String publicExponent = "65537";
PublicKey publicKey = RSAUtil.generateRSAPublicKey(modulus,
publicExponent);
return publicKey;
}

  我们看到需要将公钥模数进行替换。起初找了好久没有找到公钥模数。后来发现将生成环境下的证书的信息读取出来就可以获取公钥模数,替换即可。读取证书信息的Java代码如下:

public static void main(String[] args){
try {
CertificateFactory certificatefactory=CertificateFactory.getInstance("X.509");
FileInputStream bais=new FileInputStream("d:/aa.cer");
X509Certificate Cert = (X509Certificate)certificatefactory.generateCertificate(bais);
RSAPublicKey pk = (RSAPublicKey) Cert.getPublicKey();
sun.security.rsa.RSAPublicKeyImpl ppk = (sun.security.rsa.RSAPublicKeyImpl) pk;
System.out.println(ppk.getModulus());//获取公钥模数
System.out.println(ppk.getPublicExponent());
System.out.println(ppk.getAlgorithm());
System.out.println(ppk.getFormat());
System.out.println(ppk.getAlgorithmId());
System.out.println(ppk.getModulus().toString(16));
System.out.println(ppk.getPublicExponent().toString(16));//
System.out.println(new BigInteger(ppk.getEncoded()).toString(16));
}catch (Exception e) {
e.printStackTrace();
}
}

Android接入支付宝和银联的更多相关文章

  1. Android 接入支付宝支付实现

    接上篇android接入微信支付文章,这篇我们带你来接入支付宝支付服务 简介 首先要说明的是个人感觉接入支付宝比微信简单多了,很轻松的,所以同学们不要紧张~ 当然还是老规矩啦,上来肯定的贴上官网地址, ...

  2. Android接入支付宝支付实现

    接上篇android接入微信支付文章,这篇我们带你来接入支付宝支付服务 简介 首先要说明的是个人感觉接入支付宝比微信简单多了,很轻松的,所以同学们不要紧张~ 当然还是老规矩啦,上来肯定的贴上官网地址, ...

  3. Android接入支付宝和微信支付

    然后把下载下来的aar包,放到项目目录下面的libs目录下,通过下面的gradle依赖进来 // 支付宝 SDK AAR 包所需的配置compile(name: 'alipaySdk-15.6.0-2 ...

  4. IOS开发之—— iOS 支付 [支付宝、银联、微信]

    支付宝iOSsdk官方下载sdk地址:https://b.alipay.com/order/productDetail.htm?productId=2013080604609654&tabId ...

  5. 支付sdk —— 该组件为封装了 微信,支付宝,银联支付

    [精品]  支付组件 简要说明该组件为封装了 微信,支付宝,银联支付, 一键快速集成,几行代码即可集成 微信,支付宝,银联支付. ## 示例: # 测试账号:1.银联支付:提供测试使用卡号.手机号信息 ...

  6. iOS-iOS 支付 [支付宝、银联、微信](转)

    支付宝iOSsdk官方下载sdk地址:https://b.alipay.com/order/productDetail.htm?productId=2013080604609654&tabId ...

  7. cocos2dx工程中接入支付宝sdk

    1. 首先去支付宝官网下载开发者文档 2. 然后按着开发者文档将支付宝的sdk导入到你的工程中,并关联到工程中,步骤入下图: (1)将从支付宝官方网站获得的支付宝的sdk的jar包拷贝到工程中的lib ...

  8. 【PHP后台】接入支付宝

     我使用PHP主要是为客户端做后台使用,并不会做前端网页.   这两天因为公司项目需要,必须接入支付功能,而支付宝当然首当其冲,考虑迭代版本的需要,首先接入支付宝功能,其他的支付功能以后迭代版本的时候 ...

  9. iOS 支付 [支付宝、银联、微信]

    这是开头语 前不久做了一个项目,涉及到支付宝和银联支付,支付宝和银联都是业界的老大哥,文档.SDK都是很屌,屌的找不到,屌的看不懂,屌到没朋友(吐槽而已),本文将涉及到的最新可用SDK.文档,以及本人 ...

随机推荐

  1. logback配置详解1

    一:根节点<configuration>包含的属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文 ...

  2. mysql 主从复制配置

    环境:已经在centos下安装好mysql,安装参考:http://www.cnblogs.com/bookwed/p/5896619.html,安装好主数据库后,可以克隆一份,注意修改ip等. 19 ...

  3. delphi WebBrowser控件上网页验证码图片识别教程(一)

    步骤一:获取网页中验证码图片的url地址 在delphi中加入一个BitBtn和一个memo以及WebBrowser控件实现网页中验证码图片的url地址的获取 程序如下:procedure TForm ...

  4. WPF 开源Chart控件

    控件: Icon URL   Supplier Dynamic Data Display 2009

  5. OpenStack 企业私有云的若干需求(10):OpenStack 的前景和钱景

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  6. 一个完整的TCP连接

    当我们向服务器发送HTTP请求,获取数据.修改信息时,都需要建立TCP连接,包括三次握手,四次分手. 什么是TCP连接? 为实现数据的可靠传输,TCP要在应用进程间建立传输连接.它是在两个传输用户之间 ...

  7. [COPY] How to become a hacker

    Engish version copied from here Why This Document? As editor of the Jargon File and author of a few ...

  8. 如何保证ArrayList线程安全

    一.继承Arraylist,然后重写或按需求编写自己的方法,这些方法要写成synchronized,在这些synchronized的方法中调用ArrayList的方法.   二:使用Collectio ...

  9. hibernate缓存

    http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html http://www.cnblogs.com/xiaoluo501395377/ ...

  10. Python黑客编程ARP欺骗

    Python灰帽编程 3.1 ARP欺骗 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据 ...