支付寶支付集成

支付寶支付應該是大多數app中所需的功能,之前做的app 沒有集成過,現在的app 中需要支付功能,所以研究了下支付寶支付,很簡單,沒有想象中的那麼難,不說廢話,說說集成過程

1下載支付寶支付sdk 下在下來,放到libs目錄下

2在build.gradle 中添加依賴

compile files('libs/alipaySdk-20170922.jar')
3將支付寶文檔中的權限和所需的activity複製到清單文件中
4將後臺所需要的數據傳給後臺,這樣後天會返給你商戶privatekey和訂單的加簽數據等,然後我們用後天返回的這些數據去掉支付寶,代碼如下
 private void goPay(final String orderInfo) {
//        final String orderInfo = "alipay_sdk=alipay-sdk-php-20161101&app_id=2017080308017822&biz_content=%7B%22body%22%3A%22%5Cu901b%5Cu8857%5Cu7f51%5Cu652f%5Cu4ed8%22%2C%22subject%22%3A%22%5Cu901b%5Cu8857%5Cu7f51%5Cu652f%5Cu4ed8%22%2C%22out_trade_no%22%3A%22GJW20171012000032%22%2C%22total_amount%22%3A0.01%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%7D&charset=UTF-8&format=json&method=alipay.trade.app.pay&notify_url=http%3A%2F%2Fwww.app.guangjiew.com%2Fchi-pay%2Fpay-order-notifiy%2F&sign_type=RSA2&timestamp=2017-10-12+16%3A39%3A08&version=1.0&sign=iadkEGYXzzNh9SiaVXXC8Ou0PrtiwslvftNWviUlXrEOIsQKcs1WW5%2Ba5in0WLB0RXDltIzKJijpqxm9VVB6H0D7ARDNIQOVGV0dXYLrdjBKEG%2BtVVbzrBP8PbBN45Nvg0LyhZvbTAH6a5EP4xjN8ucIHhWsdmkNlh%2FyLi7Twal6EkAP2pVHbqkNHmsldoyiCs902BKiImZ9pQt6m42ia1aTSPtoiswP2bv4zRBMWREZJei8nTrLxjVpWUsplqKtBBfZU3EyBilgbNAgKyiBkRuiCm42sLIpEGkEbBxRPmEKpsyGW9y4yCxZfe0VMjCmXl95bosH6GvCfuCO1oXbPw%3D%3D";   // 訂單信息

        Runnable payRunnable = new Runnable() {

            @Override
            public void run() {
                PayTask alipay = new PayTask(SureOrderActivity.this);
                Map<String, String> stringStringMap = alipay.payV2(orderInfo, true);

                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = stringStringMap;
                mHandler.sendMessage(msg);

            }
        };
        // 必須異步調用
        Thread payThread = new Thread(payRunnable);
        payThread.start();
    }
5 支付結果的獲取和處理
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
    @SuppressWarnings("unused")
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case SDK_PAY_FLAG: {
                @SuppressWarnings("unchecked")
                PayResult payResult = new PayResult((Map<String, String>) msg.obj);
                /**
                 對於支付結果,請商戶依賴服務端的異步通知結果。同步通知結果,僅作爲支付結束的通知。
                 */
                String resultInfo = payResult.getResult();// 同步返回需要驗證的信息
                String resultStatus = payResult.getResultStatus();
                // 判斷resultStatus 爲9000則代表支付成功
                if (TextUtils.equals(resultStatus, "9000")) {
                    // 該筆訂單是否真實支付成功,需要依賴服務端的異步通知。
                    Toast.makeText(SureOrderActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
                } else if (TextUtils.equals(resultStatus,"6001")){
                    Toast.makeText(SureOrderActivity.this, "用戶中途取消", Toast.LENGTH_SHORT).show();
                    
                }else if (TextUtils.equals(resultStatus,"8000")){
                    Toast.makeText(SureOrderActivity.this, "正在處理中,支付結果未知(有可能已經支付成功),請查詢商戶訂單列表中訂單的支付狀態", Toast.LENGTH_SHORT).show();
                }else if (TextUtils.equals(resultStatus,"4000")){
                    Toast.makeText(SureOrderActivity.this, "訂單支付失敗", Toast.LENGTH_SHORT).show();
                    Bundle bundle = new Bundle();
                    bundle.putString("username","daifukuan");
                    JumperUtils.JumpTo(SureOrderActivity.this, AllOrder.class,bundle);
                }else if (TextUtils.equals(resultStatus,"5000")){
                    Toast.makeText(SureOrderActivity.this, "重複請求", Toast.LENGTH_SHORT).show();
                }else if (TextUtils.equals(resultStatus,"6002")){
                    Toast.makeText(SureOrderActivity.this, "網絡連接出錯", Toast.LENGTH_SHORT).show();
                }else if (TextUtils.equals(resultStatus,"6004")){
                    Toast.makeText(SureOrderActivity.this, "支付結果未知(有可能已經支付成功),請查詢商戶訂單列表中訂單的支付狀態", Toast.LENGTH_SHORT).show();
                }
                else {
                    // 該筆訂單真實的支付結果,需要依賴服務端的異步通知。
                    Toast.makeText(SureOrderActivity.this, "其它支付錯誤", Toast.LENGTH_SHORT).show();
                }
                break;
            }
            default:
                break;
        }
    };
};
還有就是PayResult這個類sdk中並未有,需要到demo中找,先在我把這個類直接粘在這
import java.util.Map;

public class PayResult {
   private String resultStatus;
   private String result;
   private String memo;

   public PayResult(Map<String, String> rawResult) {
      if (rawResult == null) {
         return;
      }

      for (String key : rawResult.keySet()) {
         if (TextUtils.equals(key, "resultStatus")) {
            resultStatus = rawResult.get(key);
         } else if (TextUtils.equals(key, "result")) {
            result = rawResult.get(key);
         } else if (TextUtils.equals(key, "memo")) {
            memo = rawResult.get(key);
         }
      }
   }

   @Override
   public String toString() {
      return "resultStatus={" + resultStatus + "};memo={" + memo
            + "};result={" + result + "}";
   }

   /**
    * @return the resultStatus
    */
   public String getResultStatus() {
      return resultStatus;
   }

   /**
    * @return the memo
    */
   public String getMemo() {
      return memo;
   }

   /**
    * @return the result
    */
   public String getResult() {
      return result;
   }
}
這樣基本支付寶就集成了,如果還有什麼問題可以去官網查看文檔,希望這篇文章能幫到需要的人





發佈了54 篇原創文章 · 獲贊 22 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章