安卓app接入支付寶支付-小結(jié)窑滞。

最近在做支付寶支付模塊琼牧,集成過程中走了一些彎路。現(xiàn)將集成過程總結(jié)一些哀卫。

這里我直接寫了一個(gè)工具類巨坊,需要的時(shí)候直接調(diào)用對象的支付方法即可,很方便了此改。

AlipayUtil aliPay=new AlipayUtil(activity,price,callBackUrl);

aliPay.Pay();

完整的代碼如下:

/**

* 可直接將代碼當(dāng)做自己的工具類

* 使用方法:

* AlipayUtil aliPay=new AlipayUtil(activity,price,callBackUrl);

* aliPay.Pay();

*/

public class AlipayUtil {

private float price;

private Activity mActivity;

private String notify_url;

//一下四個(gè)參數(shù)趾撵,需要可開發(fā)者自己配置成自己的阿里上后臺數(shù)據(jù)

// 需要注意的是: 1 商戶的私鑰是開發(fā)者在本地生成

//? ? ? ? ? ? ? ? 2 將秘鑰上傳至阿里后臺的“合作伙伴秘鑰管理”中的 RSA秘鑰。

//? ? ? ? ? ? ? ? 3 生成的公鑰在客戶端沒有用處

// 商戶PID

public static final String PARTNER = "2088221700022324";

// 商戶收款賬號

public static final String SELLER = "3372459162@qq.com";

// 商戶私鑰共啃,pkcs8格式

public static final String RSA_PRIVATE = "你的私鑰";

private static final int SDK_PAY_FLAG = 1;

private static final int SDK_CHECK_FLAG = 2;

public AlipayUtil(Activity mActivity, float price,String url) {

this.mActivity = mActivity;

this.price = price;

this.notify_url=url;

}

public void Pay() {

String orderInfo = getOrderInfo("測試", "test",

String.valueOf(price));

// 對訂單做RSA 簽名

String sign = sign(orderInfo);

try {

// 僅需對sign 做URL編碼

sign = URLEncoder.encode(sign, "UTF-8");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

// 完整的符合支付寶參數(shù)規(guī)范的訂單信息

final String payInfo = orderInfo + "&sign=\"" + sign + "\"&"

+ getSignType();

Runnable payRunnable = new Runnable() {

@Override

public void run() {

// 構(gòu)造PayTask 對象

PayTask alipay = new PayTask(mActivity);

// 調(diào)用支付接口鼓寺,獲取支付結(jié)果

String result = alipay.pay(payInfo, true);

Message msg = new Message();

msg.what = SDK_PAY_FLAG;

msg.obj = result;

mHandler.sendMessage(msg);

}

};

// 必須異步調(diào)用

Thread payThread = new Thread(payRunnable);

payThread.start();

}

/**

* sign the order info. 對訂單信息進(jìn)行簽名

* @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\"";

}

/**

* create the order info. 創(chuàng)建訂單信息

*

*/

public String getOrderInfo(String subject, String body, String price) {

// 簽約合作者身份ID

String orderInfo = "partner=" + "\"" + PARTNER + "\"";

// 簽約賣家支付寶賬號

orderInfo += "&seller_id=" + "\"" + SELLER + "\"";

// 商戶網(wǎng)站唯一訂單號

orderInfo += "&out_trade_no=" + "\"" + getOutTradeNo() + "\"";

// 商品名稱

orderInfo += "&subject=" + "\"" + subject + "\"";

// 商品詳情

orderInfo += "&body=" + "\"" + body + "\"";

// 商品金額

orderInfo += "&total_fee=" + "\"" + price + "\"";

// 服務(wù)器異步通知頁面路徑

orderInfo += "?ify_url=" + "\"" +notify_url

+ "\"";

// 服務(wù)接口名稱, 固定值

orderInfo += "&service=\"mobile.securitypay.pay\"";

// 支付類型勋磕, 固定值

orderInfo += "&payment_type=\"1\"";

// 參數(shù)編碼妈候, 固定值

orderInfo += "&_input_charset=\"utf-8\"";

// 設(shè)置未付款交易的超時(shí)時(shí)間

// 默認(rèn)30分鐘,一旦超時(shí)挂滓,該筆交易就會自動被關(guān)閉苦银。

// 取值范圍:1m~15d。

// m-分鐘,h-小時(shí)幔虏,d-天纺念,1c-當(dāng)天(無論交易何時(shí)創(chuàng)建,都在0點(diǎn)關(guān)閉)想括。

// 該參數(shù)數(shù)值不接受小數(shù)點(diǎn)陷谱,如1.5h,可轉(zhuǎn)換為90m瑟蜈。

orderInfo += "&it_b_pay=\"30m\"";

// extern_token為經(jīng)過快登授權(quán)獲取到的alipay_open_id,帶上此參數(shù)用戶將使用授權(quán)的賬戶進(jìn)行支付

// orderInfo += "&extern_token=" + "\"" + extern_token + "\"";

// 支付寶處理完請求后烟逊,當(dāng)前頁面跳轉(zhuǎn)到商戶指定頁面的路徑,可空

orderInfo += "&return_url=\"m.alipay.com\"";

// 調(diào)用銀行卡支付铺根,需配置此參數(shù)宪躯,參與簽名, 固定值 (需要簽約《無線銀行卡快捷支付》才能使用)

// orderInfo += "&paymethod=\"expressGateway\"";

return orderInfo;

}

/**

* get the out_trade_no for an order. 生成商戶訂單號位迂,該值在商戶端應(yīng)保持唯一(可自定義格式規(guī)范)

*

*/

public String getOutTradeNo() {

SimpleDateFormat format = new SimpleDateFormat("MMddHHmmss",

Locale.getDefault());

Date date = new Date();

String key = format.format(date);

Random r = new Random();

key = key + r.nextInt();

key = key.substring(0, 15);

return key;

}

private Handler mHandler = new Handler() {

public void handleMessage(Message msg) {

switch (msg.what) {

case SDK_PAY_FLAG: {

PayResult payResult = new PayResult((String) msg.obj);

// 支付寶返回此次支付結(jié)果及加簽访雪,建議對支付寶簽名信息拿簽約時(shí)支付寶提供的公鑰做驗(yàn)簽

String resultInfo = payResult.getResult();

String resultStatus = payResult.getResultStatus();

// 判斷resultStatus 為“9000”則代表支付成功,具體狀態(tài)碼代表含義可參考接口文檔

if (TextUtils.equals(resultStatus, "9000")) {

//支付成功 發(fā)送通知操作掂林,開發(fā)者自行定義臣缀。

} else {

// 判斷resultStatus 為非“9000”則代表可能支付失敗

// “8000”代表支付結(jié)果因?yàn)橹Ц肚涝蚧蛘呦到y(tǒng)原因還在等待支付結(jié)果確認(rèn),最終交易是否成功以服務(wù)端異步通知為準(zhǔn)(小概率狀態(tài))

if (TextUtils.equals(resultStatus, "8000")) {

Toast.makeText(mActivity, "支付結(jié)果確認(rèn)中", Toast.LENGTH_SHORT)

.show();

} else {

// 其他值就可以判斷為支付失敗泻帮,包括用戶主動取消支付肝陪,或者系統(tǒng)返回的錯(cuò)誤

Toast.makeText(mActivity, "支付失敗", Toast.LENGTH_SHORT)

.show();

}

}

break;

}

case SDK_CHECK_FLAG: {

Toast.makeText(mActivity, "檢查結(jié)果為:" + msg.obj, Toast.LENGTH_SHORT)

.show();

break;

}

default:

break;

}

};

};

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市刑顺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饲常,老刑警劉巖蹲堂,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贝淤,居然都是意外死亡柒竞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門播聪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朽基,“玉大人,你說我怎么就攤上這事离陶〖诨ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵招刨,是天一觀的道長霎俩。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么打却? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任杉适,我火速辦了婚禮,結(jié)果婚禮上柳击,老公的妹妹穿的比我還像新娘猿推。我一直安慰自己,他們只是感情好捌肴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布蹬叭。 她就那樣靜靜地躺著,像睡著了一般哭靖。 火紅的嫁衣襯著肌膚如雪具垫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天试幽,我揣著相機(jī)與錄音筝蚕,去河邊找鬼。 笑死铺坞,一個(gè)胖子當(dāng)著我的面吹牛起宽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播济榨,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坯沪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了擒滑?” 一聲冷哼從身側(cè)響起腐晾,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丐一,沒想到半個(gè)月后藻糖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡库车,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年巨柒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柠衍。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洋满,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出珍坊,到底是詐尸還是另有隱情牺勾,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布阵漏,位于F島的核電站禽最,受9級特大地震影響腺怯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜川无,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一呛占、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懦趋,春花似錦晾虑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至诫咱,卻和暖如春笙隙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坎缭。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工竟痰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掏呼。 一個(gè)月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓坏快,卻偏偏與公主長得像,于是被迫代替她去往敵國和親憎夷。 傳聞我的和親對象是個(gè)殘疾皇子莽鸿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容