解决新版Android studio导入微信支付和支付宝官方Demo的问题
最近项目要用到支付宝支付和微信支付,本想使用第三方支付框架ping++或者BeeCloud的,但是由于他们的收费问题,让我望而却步,而且公司给了相应的公钥、私钥和APPID等,所以就用下开放平台的呗。
进去倒腾了半天才发现一堆问题,Oh,我的天。完全不知所云,百度谷歌了一堆,都没找到足够的解决方案。好吧,自己来,这里也就把相关的东西分享给大家,如果有类似问题的可以考虑使用一下,不足的地方大牛就别喷了。
微信开放平台有文档和SDK,大家可以去自己查看下载,火箭:https://open.weixin.qq.com/
支付宝官方的Demo和文档相对简单些,而且说的更清楚些,火箭:https://open.alipay.com/platform/home.htm
还是先看下运行的Demo图示:
首先是微信的
再看看支付宝的
点击支付会跳转到你手机上的支付宝APP,如果手机上没有下载也是可以用的,不过用的不在一个真正的支付宝APP中
但是这么简单的东西,楼主的确智商捉急,都弄了半天。
首先是导入微信的Demo,去官方下载了SimpleDemo后,发现一堆错误,好吧,首先是SDK的问题,这个就不多做赘述了。
然后修改后Try Again oh,no,又来一个什么鬼。
什么鬼,仔细一看,是drawable里面有不是png的文件命名成了png文件。
好吧,如果你足够的耐心,那么几十张图片,你还是可以直接一张一张的检查后缀的,看看有不是png作为后缀的,另存一下,或者修改你的文件名使其和后缀名一致。
然而程序员的能力应该体现在偷懒的程度上,所以容我偷懒啦。
1 compileSdkVersion 23 2 buildToolsVersion "24.0.0" 3 aaptOptions.cruncherEnabled = false 4 aaptOptions.useNewCruncher = false 5 6 defaultConfig { 7 applicationId "net.sourceforge.simcpux" 8 minSdkVersion 4 9 targetSdkVersion 23 10 }
只需要在对应的gradle文件中加上两句话 ,并把值至为false即可。
再次Try again, oh ,no,这次是一大堆错误,什么鬼!看一看日志。
哦,原来是因为6.0以后官方隐藏的HttpClient的相关API,然而大多数导入的代码都还用着这个强大的框架,那怎么弄呢?
好的,只需要再在Gradle文件中添加这样的一句话就好
android { useLibrary 'org.apache.http.legacy' }
1 dependencies { 2 compile files('libs/libammsdk.jar') 3 4 android { 5 useLibrary 'org.apache.http.legacy' 6 } 7 }
再来看看支付宝的,就简单多了。我遇到的第一个问题是,没有指定APPID,公钥那些东西,好的,这个肯定是得弄得,把自己申请的一系列东西装进去。
运行一看。
嘿嘿,有界面,应该可以吧,点击一下支付。
Oh on,直接崩溃
错也总得有原因哈,看看日志。
空指针异常?进去一看
1 sign = URLEncoder.encode(sign, "UTF-8");
是这样一句话出现了问题,这句话什么问题呢。
1 /** 2 * sign the order info. 对订单信息进行签名 3 * 4 * @param content 5 * 待签名订单信息 6 */ 7 private String sign(String content) { 8 return SignUtils.sign(content, RSA_PRIVATE); 9 }
这个方法的问题,这样返回的是一个空的。
再进去一看
1 ublic static String sign(String content, String privateKey) { 2 try { 3 PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec( 4 Base64.decode(privateKey)); 5 KeyFactory keyf = KeyFactory.getInstance(ALGORITHM); 6 PrivateKey priKey = keyf.generatePrivate(priPKCS8); 7 8 java.security.Signature signature = java.security.Signature 9 .getInstance(SIGN_ALGORITHMS); 10 11 signature.initSign(priKey); 12 signature.update(content.getBytes(DEFAULT_CHARSET)); 13 14 byte[] signed = signature.sign(); 15 16 return Base64.encode(signed); 17 } catch (Exception e) { 18 e.printStackTrace(); 19 } 20 21 return null; 22 }
是这样的一串代码,原来这个方法是把私钥转换成应该有的格式,而我公司给的意见转换好了,好吧。
那直接返回就成了呗
1 /** 2 * sign the order info. 对订单信息进行签名 3 * 4 * @param content 5 * 待签名订单信息 6 */ 7 private String sign(String content) { 8 // return SignUtils.sign(content, RSA_PRIVATE); 9 return RSA_PRIVATE; 10 }
修改一下,再次运行。Oh yeah,成功!
今天就讲这么多,有啥不懂的,还是运用万能的百度吧!
作 者:
南 尘
出 处: http://www.cnblogs.com/liushilin/
关于作者:专注于移动前端的项目开发。如有问题或建议,请多多赐教!欢迎加入Android交流群:118116509
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章下部【推荐】或侧边【关注】。您的鼓励是作者坚持原创和持续写作的最大动力!
欢迎关注我的公众号,精讲面试、算法、Andrid、Java、Python,旨在打造全网最比心的公众号。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?