Android 集成支付宝支付,支付宝支付2.0
生活随笔
收集整理的這篇文章主要介紹了
Android 集成支付宝支付,支付宝支付2.0
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
成功起調支付寶支付
下載支付sdk復制到libs文件夾下并add? as library:https://docs.open.alipay.com/54/104509
?
1、首先申請支付寶 企業賬戶? 鏈接:https://memberprod.alipay.com/account/reg/enterpriseIndex.htm
? ? ?備注:企業賬戶是以郵箱申請
2、1登錄支付寶企業賬戶,到產品中心創建? ?APP支付? 產品
2 、2創建? APP支付 成功得到收款賬戶
3、打開手機支付寶APP掃描登錄 螞蟻金服|開發平臺? 鏈接https://auth.alipay.com/login/index.htm?goto=https%3A%2F%2Fdocs.open.alipay.com%2F204%2F105297%2F
登錄后,點擊? 管理中心——>網頁&移動應用——>支付接入——創建應用
創建成功,并簽約 APP支付,顯示已簽約則成功
4、設置密鑰,及APPID
鼠標放到【主賬號】上,下拉,點擊? 密鑰管理,,,,注意是mapi網關下的密鑰
設置應用公鑰:https://docs.open.alipay.com/291/105971
?
5、實現activity代碼:
public class MainActivity extends AppCompatActivity {// 支付寶KEYpublic static final String PARTNER = "2088331094298926";//螞蟻金服|開放平臺 密鑰APPIDpublic static final String SELLER = "200970769@qq.com";//支付寶企業賬戶public static final String RSA_PRIVATE ="MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCqBQZ8p0X+AB5so6Gfb3JWihBJHKwlzA8Gaj/pz4VwskubWqgDjMmGw9TWhSuQezbX8BVogdJz9vYkgb2WnTVoOd3" +"bD0JvemfW+CBZzmHpjCFEWuT0l8wcnoJuF8vlUztHoscqJbZNJO/MXe3SQq0/qXt/gV5yEzScwdlbfuifK8jAhGmyUxYzKDMsfpfhlYJlkSFxmegDmNb8d+xsQZdrmESYop9tf60fdFwikqy1U09hXdNeC5XdClgLy8ihge9sf8j5vLPKr" +"PhDlC/WoDYnuUNylHmRO78EscNRa89AMiwARsX3pI7Hp5jvHku7m6EFzAJIpRHgi1mT8HMbP+eLAgMBAAECggEAAQRWrZgyivplNDEmXlXEUVAyGL3bKb62uEsaZsOfALWQTjWUm7DT48J4G3BgelTCVzhQaHeeUqM/hahhAe2ezCjMcur8cr5A" +"sMB7MQ5S95qm+Emy5OOjjOhFz3LE/XIqAJuwpUfkd0GpTYeiTIepkZ/p5TFY50XGIsnmCu4PZiRSZ46SGe9TU1ko79p7seyrhNy8d1nxYPF37q/8+3MlEZv60btY+bD42KCF0Be48UHjq7rbDcX1IUoiCR+63j9hwfMH0bZ7eTzlAxrFbqjViadyDBF" +"VdubMVgBy0o/CSslc1aa+HRmNrEVd3k+P+nn556zOgvIPy17Ek62JCm59AQKBgQDZ5b0nK4ot6gIkqWzaJvOcyUX0C1mMxQQSc/criShE90Vn45NEVRJ79Ypn9+0pDuG/d+0XvTXp8C/OAfIuGF+MsjDPqBpLuTvFf65lGUfCJ4kjgX+36jBjt1czCAh" +"/bDaa8I1c+qyXA1okms9rd2BqkzCvUB8sURXYwl3QiXNL2wKBgQDHwATe7lfB99odhg9se7M9bRtKE7LRhd1Wt5NBQQ6I0a4Cxe49rqo6kYJ7mfhuHMHvgemwxL7gqWqnQiqWocmQ4Po6I7kkVR6/07Zrw7PAvj1hkNUP3brgARYbYdMUsj+7gFOvnyUtb" +"rnFhQGgPbr2rOrgMZ461FD3Ynqn0Mz6EQKBgQCptgoRTBQflrd8noktkFEFuK5HWd+xiHGXfcLxoa4/qOfh9pppCmmPKrtWJwAMjo69dkavyqsHPg+9wD5EMK+bAd6Knj984xTuynemPn5pdimWAfLb6AcwY0gDcypLNJmDLACufn+WTwISqJEM/rmVyHaO1T" +"Sya6U8YoZ3OdcXKQKBgEzPYNAc1LAoz73EnE+57X20Y+cDViLNmARNiRlxm9Yu0vwMAoXDkX/+Di/bUDV/Z2/jA+rObRvU6ccxYVEVG35TlMUgkYQQG0fmcGJWGdwHC3FmERgNylty735OCq4NsQY33XZN+yzSRCtY7vwgYLGUYqkdS1wR4qSOQN4hI4ERAoGBAL" +"I32L4Hlg368da50Z+oc/BT/4sWTnwSLDJJt48ZTrzvYGBgX9A4tWKmBWDbGNKKE76RcBBT7xntfOnf6x/I3mhPp+gmkSCC3FB7NCV7kkRI/1mj/i7y7f+KYk8zHd+VQyV+vGYHRmLgn9WhCv+qPNNC3Abm2qHMJF6FD2tmiOgS";//螞蟻金服|開放平臺 RSA(SHA256)密鑰(推薦)@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView textView = (TextView)findViewById(R.id.myte);textView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {aliPay();}});}/*** sign the order info. 對訂單信息進行簽名** @param content 待簽名訂單信息*/public String sign(String content) {return SignUtils.sign(content, RSA_PRIVATE);}/*** get the sign type we use. 獲取簽名方式*/public String getSignType() {return "sign_type=\"RSA\""; // return "sign_type=\"RSA2\"";}//支付寶private void aliPay() {// 調用接口傳值String name = "天鑫網吧充值訂單";String money = "0.01";String orderInfo = getOrderInfo(name, name, money);// 創建訂單信息String sign = sign(orderInfo);// 對訂單信息進行簽名try {// 僅需對sign 做URL編碼sign = URLEncoder.encode(sign, "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}final String payInfo = orderInfo + "&sign=\"" + sign + "\"&" + getSignType();Runnable payRunnable = new Runnable() {@Overridepublic void run() {// 構造PayTask 對象 // PayTask alipay = new PayTask(UpgradePayActivity.this); // // 調用支付接口 // String result = alipay.pay(payInfo, true); // Message msg = new Message(); // msg.what = SDK_PAY_FLAG; // msg.obj = result; // handler.sendMessage(msg);DoPaymentTask paymentTask = new DoPaymentTask();paymentTask.execute(payInfo);}};Thread payThread = new Thread(payRunnable);payThread.start();}public String getTime(){long time=System.currentTimeMillis()/1000;//獲取系統時間的10位的時間戳String str=String.valueOf(time);return str;}/*** create the order info. 創建訂單信息*/public String getOrderInfo(String subject, String body, String price) {// 合作者身份IDString orderInfo = "partner=" + "\"" + PARTNER + "\"";// 賣家支付寶賬號orderInfo += "&seller_id=" + "\"" + SELLER + "\"";// 商戶網站唯一訂單號orderInfo += "&out_trade_no=" + "\"" + getTime()+ "\"";// 商品名稱orderInfo += "&subject=" + "\"" + subject + "\"";// 商品詳情orderInfo += "&body=" + "\"" + body + "\"";// 商品金額orderInfo += "&total_fee=" + "\"" + price + "\"";// Constants.PAY_CHANGE_URL+"?code=alipay&user_id"// 服務器異步通知頁面路徑 // orderInfo += "¬ify_url=" + "\"" + "https://open.tencent.com/" + "\"";// 接口名稱, 固定值orderInfo += "&service=\"mobile.securitypay.pay\"";// 支付類型, 固定值orderInfo += "&payment_type=\"1\"";// 參數編碼, 固定值orderInfo += "&_input_charset=\"utf-8\"";// 設置未付款交易的超時時間// 默認30分鐘,一旦超時,該筆交易就會自動被關閉。// 取值范圍:1m~15d。// m-分鐘,h-小時,d-天,1c-當天(無論交易何時創建,都在0點關閉)。// 該參數數值不接受小數點,如1.5h,可轉換為90m。orderInfo += "&it_b_pay=\"30m\"";// 支付寶處理完請求后,當前頁面跳轉到商戶指定頁面的路徑,可空orderInfo += "&return_url=\"m.alipay.com\"";// 調用銀行卡支付,需配置此參數,參與簽名, 固定值// orderInfo += "&paymethod=\"expressGateway\"";return orderInfo;}private class DoPaymentTask extends AsyncTask<String, Void, Map<String, String>> {@Overrideprotected Map<String, String> doInBackground(String... params) {// 構造PayTask 對象PayTask alipay = new PayTask(MainActivity.this);// 調用支付接口,獲取支付結果Map<String, String> result = alipay.payV2(params[0], true);return result;}@Overrideprotected void onPostExecute(Map<String, String> result) {@SuppressWarnings("unchecked")PayResult payResult = new PayResult(result);/**對于支付結果,請商戶依賴服務端的異步通知結果。同步通知結果,僅作為支付結束的通知。*/String resultInfo = payResult.getResult();// 同步返回需要驗證的信息String resultStatus = payResult.getResultStatus();Log.i("lgq支付寶支付響應狀態", resultStatus);if (resultStatus.equals("6001")){Toast.makeText(MainActivity.this,"支付取消",Toast.LENGTH_SHORT).show();}// 判斷resultStatus 為9000則代表支付成功if (TextUtils.equals(resultStatus, "9000")) {Toast.makeText(MainActivity.this,"支付成功",Toast.LENGTH_LONG).show();// 該筆訂單是否真實支付成功,需要依賴服務端的異步通知。 // verifyPay();} else {// 該筆訂單真實的支付結果,需要依賴服務端的異步通知。// 判斷resultStatus 為非“9000”則代表可能支付失敗// “8000”代表支付結果因為支付渠道原因或者系統原因還在等待支付結果確認,最終交易是否成功以服務端異步通知為準(小概率狀態)if (TextUtils.equals(resultStatus, "8000")) { // if (payResultListener != null) { // payResultListener.onProcess(); // }} else {// 其他值就可以判斷為支付失敗,包括用戶主動取消支付,或者系統返回的錯誤 // if (payResultListener != null) { // payResultListener.onFail(); // }} // 9000 訂單支付成功 // 8000 正在處理中,支付結果未知(有可能已經支付成功),請查詢商戶訂單列表中訂單的支付狀態 // 4000 訂單支付失敗 // 5000 重復請求 // 6001 用戶中途取消 // 6002 網絡連接出錯 // 6004 支付結果未知(有可能已經支付成功),請查詢商戶訂單列表中訂單的支付狀態 // 其它 其它支付錯誤}}} }?
工具類
SignUtils public class SignUtils {private static final String ALGORITHM = "RSA";private static final String SIGN_ALGORITHMS = "SHA1WithRSA";private static final String DEFAULT_CHARSET = "UTF-8";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;}}?
demo鏈接:https://download.csdn.net/download/meixi_android/10723852
?
在線交流bug:qq1085220040
?
2、支付寶支付2.0
賬號申請與1.0一樣,集成比1.0更高效簡潔
權限:
<uses-permission android:name="android.permission.INTERNET"/>
1、引入支付寶SDK2.0
下載SDK鏈接:https://download.csdn.net/download/meixi_android/11362258
添加步驟:
(1)下載支付寶SDK2.0aar文件復制到libs文件夾下
(2)添加app的build.gradle下添加配置
// 支付寶 SDK AAR 包所需的配置 compile (name: 'alipaySdk-15.6.4-20190611174341', ext: 'aar')(3)在項目的build.gradle文件夾下添加配置
allprojects {repositories {// 支付寶 SDK AAR 包所需的配置flatDir {dirs 'libs'}2、實現代碼:
(1)五個工具類都是固定值,直接cp可用
(2)activity代碼實現調用支付寶支付?
/*** 支付寶支付業務示例*/ public void payV2(View v) {if (TextUtils.isEmpty(APPID) || (TextUtils.isEmpty(RSA2_PRIVATE) && TextUtils.isEmpty(RSA_PRIVATE))) {showAlert(this, "支付參數缺失");return;}/** 這里只是為了方便直接向商戶展示支付寶的整個支付流程;所以Demo中加簽過程直接放在客戶端完成;* 真實App里,privateKey等數據嚴禁放在客戶端,加簽過程務必要放在服務端完成;* 防止商戶私密數據泄露,造成不必要的資金損失,及面臨各種安全風險;** orderInfo 的獲取必須來自服務端;*/boolean rsa2 = (RSA2_PRIVATE.length() > 0);Map<String, String> params = OrderInfoUtil2_0.buildOrderParamMap(APPID, rsa2);String orderParam = OrderInfoUtil2_0.buildOrderParam(params);String privateKey = rsa2 ? RSA2_PRIVATE : RSA_PRIVATE;String sign = OrderInfoUtil2_0.getSign(params, privateKey, rsa2);final String orderInfo = orderParam + "&" + sign;final Runnable payRunnable = new Runnable() {@Overridepublic void run() {PayTask alipay = new PayTask(MainActivity.this);Map<String, String> result = alipay.payV2(orderInfo, true);Log.i("msp", result.toString());Message msg = new Message();msg.what = SDK_PAY_FLAG;msg.obj = result;mHandler.sendMessage(msg);}};// 必須異步調用Thread payThread = new Thread(payRunnable);payThread.start(); }?
支付寶支付2.0demo:https://download.csdn.net/download/meixi_android/11362574
總結
以上是生活随笔為你收集整理的Android 集成支付宝支付,支付宝支付2.0的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 敏捷开发总结(1)软件研发过程
- 下一篇: Android 解决导入多个module