Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 新版Android studio導入微信支付和支付寶官方Demo問題解決大全

新版Android studio導入微信支付和支付寶官方Demo問題解決大全

編輯:關於Android編程

最近項目要用到支付寶支付和微信支付,本想使用第三方支付框架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作為後綴的,另存一下,或者修改你的文件名使其和後綴名一致。

然而程序員的能力應該體現在偷懶的程度上,所以容我偷懶啦。

compileSdkVersion 23
 buildToolsVersion "24.0.0"
 aaptOptions.cruncherEnabled = false
 aaptOptions.useNewCruncher = false

 defaultConfig {
  applicationId "net.sourceforge.simcpux"
  minSdkVersion 4
  targetSdkVersion 23
}

只需要在對應的gradle文件中加上兩句話 ,並把值至為false即可。 

再次Try again, oh ,no,這次是一大堆錯誤,什麼鬼!看一看日志。

哦,原來是因為6.0以後官方隱藏的HttpClient的相關API,然而大多數導入的代碼都還用著這個強大的框架,那怎麼弄呢?
好的,只需要再在Gradle文件中添加這樣的一句話就好

 android {
  useLibrary 'org.apache.http.legacy'
 }

dependencies {
 compile files('libs/libammsdk.jar')

 android {
  useLibrary 'org.apache.http.legacy'
 }
}

再來看看支付寶的,就簡單多了。我遇到的第一個問題是,沒有指定APPID,公鑰那些東西,好的,這個肯定是得弄得,把自己申請的一系列東西裝進去。
運行一看。 

 

嘿嘿,有界面,應該可以吧,點擊一下支付。 

Oh on,直接崩潰

 

錯也總得有原因哈,看看日志。

空指針異常?進去一看
 sign = URLEncoder.encode(sign, "UTF-8");

是這樣一句話出現了問題,這句話什麼問題呢。

/**
  * sign the order info. 對訂單信息進行簽名
  * 
  * @param content
  *   待簽名訂單信息
  */
 private String sign(String content) {
  return SignUtils.sign(content, RSA_PRIVATE);
 }

這個方法的問題,這樣返回的是一個空的。
 再進去一看

public static String sign(String content, String privateKey) {
  try {
   PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(
     Base64.decode(privateKey));
   KeyFactory keyf = KeyFactory.getInstance(ALGORITHM);
   PrivateKey priKey = keyf.generatePrivate(priPKCS8);

   java.security.Signature signature = java.security.Signature
     .getInstance(SIGN_ALGORITHMS);

   signature.initSign(priKey);
   signature.update(content.getBytes(DEFAULT_CHARSET));

   byte[] signed = signature.sign();

   return Base64.encode(signed);
  } catch (Exception e) {
   e.printStackTrace();
  }

  return null;
 }

是這樣的一串代碼,原來這個方法是把私鑰轉換成應該有的格式,而我公司給的意見轉換好了,好吧。
 那直接返回就成了呗

/**
  * sign the order info. 對訂單信息進行簽名
  * 
  * @param content
  *   待簽名訂單信息
  */
 private String sign(String content) {
//  return SignUtils.sign(content, RSA_PRIVATE);
  return RSA_PRIVATE;
}

修改一下,再次運行。Oh yeah,成功!
今天就講這麼多,有啥不懂的,還是運用萬能的百度吧!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved