支付宝接入参考链接: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. CentOS 6.8 LAMP 安装配置

    1.远程系统拒绝了连接: 需要关闭防火墙/etc/rc.d/init.d/iptables stop service iptables stop chkconfig iptables off sete ...

  2. kobject.c 添加注释

    最近结合<Linux Device Drivers>对kobject的理解,对kobject.c文件添加注释,仅供参考! 1 /**  2  *    populate_dir - pop ...

  3. 深度理解Jquery 中 offset() 方法

    参考原文:深度理解Jquery 中 offset() 方法

  4. FineReport如何连接和使用MongoDB数据库

    随着NoSQL数据库越来越流行,MongoDB数据库作为NoSQL数据库中的领头羊,使用也越来越广泛.为此,FineReport V8.0版本提供了数据连接和数据集接口,可以通过开发一款可以连接和使用 ...

  5. Azure HDInsight 和 Spark 大数据实战(一)

    What is HDInsight? Microsoft Azure HDInsight 是基于 Hortonoworks Data Platform (HDP) 的 Hadoop 集群,包括Stor ...

  6. codevs2178 表达式运算Cuties[笛卡尔树]

    2178 表达式运算Cuties  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 大师 Master 题解  查看运行结果     题目描述 Description 给出一个表达 ...

  7. 基本排序(二)插入排序(直接插入、Shell、折半)

    插入排序是常见的内部排序之一.常见的插入排序包括直接插入排序.Shell排序.折半排序.本篇主要介绍这三个排序. 转载请注明出处——http://www.cnblogs.com/zrtqsk/p/38 ...

  8. rpc框架之gRPC 学习 - hello world

    grpc是google在github于2015年开源的一款RPC框架,虽然protobuf很早google就开源了,但是google一直没推出正式的开源框架,导致github上基于protobuf的r ...

  9. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  10. vs2010集成git指南

    1.安装 Git Extensions  下载地址:http://gotgit.github.com/gotgithub/10-appendix/030-install-on-windows-cygw ...