1.到支付寶官網https://b.alipay.com/order/techService.htm?channel=psl下載(快捷支付(無線))開發包。將alipay-sdk-common文件夾下的alipaysdk.jar ,alipaysecsdk.jar,alipaysecsdk.jar 拷貝到工程的libs下。
2.支付寶集成
在技術集成之前,商戶需要在https://ms.alipay.com進行注冊,并簽約安全支付服務。簽約成功后可獲得支付寶分配的合作商戶ID(PartnerID),賬戶ID(SellerID),調用接口時使用。
支付細節的實現,主要通過支付寶提供的1個支付安全服務安裝包alipay_plugin_20120428msp.apk,首次使用,首先檢查是不是安裝此插件,沒有會提示安裝。具體的支付細節,在這個插件內完成。大部份的支付平臺也都是采取的這類方式。
調用支付寶的接口進行支付,主要有以下幾個步驟
將商戶ID,收款帳號,外部定單號,商品名稱,商品介紹,價格,通知地址封裝成定單信息
對定單信息進行簽名
將定單信息,簽名,簽名方式封裝成要求參數
調用pay方法。
下面我們就從點擊支付按鈕開始:
ResultSingleBean rb6 = (ResultSingleBean) VolleyResponseHelper
.jsonToBean(response, 43);
if (rb6.getRetCode() == 0) {
final PayDataBean bean = (PayDataBean) rb6.getRetObj();
new Thread() {
public void run() {
PayTask alipay = new PayTask(OrderDetailActivity.this);
// 設置為沙箱模式,不設置默許為線上環境
// alipay.setSandBox(true);
String result = alipay.pay(bean.getPayData());
Message msg = new Message();
msg.what = RQF_PAY;
msg.obj = result;
CommonUtils.logWrite("pay result1111111111",result);
mHandler.sendMessage(msg);
}
}.start();
} else {
CustomToast.showToast(rb6.getRetMessage(), OrderDetailActivity.this);
}
}
上面我將1些pay 方法需要的1些參數封裝到bean 當中,實際開發中這個bean中的數據最好去從服務器獲得,保證與支付寶平臺數據的同步。
我們現在來看1下 pay()需要的參數:
主要包括商戶的定單信息,key=”value”情勢,以&連接。 支付參數示例以下: partner=”2088101568358171”&seller_id=”xxx@alipay.com”&out_trade_no=”0819145 412⑹177”&subject=”商品名稱”&body=”商品詳情 “&total_fee=”0.01總金額”¬ify_url=”http://notify.msp.hk/notify.htm用于通知服務器進行相干操作”&service=”mobile.securi typay.pay”&payment_type=”1”&_input_charset=”utf⑻”&it_b_pay=”30m”&sign=”lBBK %2F0w5LOajrMrji7DUgEqNjIhQbidR13GovA5r3TgIbNqv231yC1NksLdw%2Ba3JnfH XoXuet6XNNHtn7VE%2BeCoRO1O%2BR1KugLrQEZMtG5jmJIe2pbjm%2F3kb%2F uGkpG%2BwYQYI51%2BhA3YBbvZHVQBYveBqK%2Bh8mUyb7GM1HxWs9k4%3D “&sign_type=”RSA”
若調用成功返回結果示例以下:
resultStatus={9000};memo={};result={partner=”2088101568358171”&seller_id= “xxx@alipay.com”&out_trade_no=”0819145412⑹177”&subject=”測試”&body=”測試 測 試 “&total_fee=”0.01”¬ify_url=”http://notify.msp.hk/notify.htm”&service=” mobile.securitypay.pay”&payment_type=”1”&_input_charset=”utf⑻”&it_b_pay= “30m”&success=”true”&sign_type=”RSA”&sign=”hkFZr+zE9499nuqDNLZEF7W75RFFPs ly876QuRSeN8WMaUgcdR00IKy5ZyBJ4eldhoJ/2zghqrD4E2G2mNjs3aE+HCLiBXrPDNdLKCZ gSOIqmv46TfPTEqopYfhs+o5fZzXxt34fwdrzN4mX6S13cr3UwmEV4L3Ffir/02RBVtU=”}
具體參數請參考剛剛下載的sdk所附文檔。
問了方便 我們將返回結果進行處理:
public class AliPayResult {
static String str = "resultStatus={9000};memo={};result={partner="2088201363678709"&seller_id="2088201363678709"&out_trade_no="7078994"&subject="速普商城定單No:7078994"&body="0105041067 MOONY 尤妮佳 原裝進口嬰兒紙尿褲 L54片 *1"&total_fee="0.01"¬ify_url="http%3a%2f%2fwww.supuy.com%2fbank%2fAlipay_MobileNotify_V2.aspx"&service="mobile.securitypay.pay"&payment_type="1"&_input_charset="utf-8"&it_b_pay="60m"&success="true"&sign_type="RSA"&sign="WxHHLaeqXcoyViBJyQV1a2+luhry9umGDLnjSX4HrcH6Q6Un75KJwIT1QAWnHcXrVOPcAT9xD8Sk923SjUkQRA0VDh29IPNA26FV+aaxV5yMyPP/kBF+oKiQy01LhQswTZDTF7k21SR2PNEdjXFnHzQJvzjthILbgJp7aEASwLM="}";
public static void main(String[] args) {
AliPayResult result = new AliPayResult(str);
result.getResult();
}
private static final Map<String, String> sResultStatus;
private String mResult;
String resultStatus = null;
String memo = null;
String result = null;
boolean isSignOk = false;
public AliPayResult(String result) {
this.mResult = result;
}
static {
sResultStatus = new HashMap<String, String>();
sResultStatus.put("{9000}", "支付成功");
sResultStatus.put("{4000}", "系統異常");
sResultStatus.put("{4001}", "定單參數毛病");
sResultStatus.put("{6001}", "您已取消了本次定單的支付");
sResultStatus.put("{6002}", "網絡連接異常");
}
/**
* 獲得支付寶返回的支付狀態信息
*
* @return
*/
public String getResult() {
AliPayResultBean bean = Json2Bean(string2JSON(mResult, ";"));
return sResultStatus.get(bean.getResultStatus());
}
private AliPayResultBean Json2Bean(JSONObject json) {
Gson gson = new Gson();
return gson.fromJson(json.toString(), AliPayResultBean.class);
}
public JSONObject string2JSON(String src, String split) {
JSONObject json = new JSONObject();
try {
String[] arr = src.split(split);
for (int i = 0; i < arr.length; i++) {
String[] arrKey = arr[i].split("=");
json.put(arrKey[0], arr[i].substring(arrKey[0].length() + 1));
}
} catch (Exception e) {
e.printStackTrace();
}
return json;
}
private String getContent(String src, String startTag, String endTag) {
String content = src;
int start = src.indexOf(startTag);
start += startTag.length();
try {
if (endTag != null) {
int end = src.indexOf(endTag);
content = src.substring(start, end);
} else {
content = src.substring(start);
}
} catch (Exception e) {
e.printStackTrace();
}
return content;
}
}
返回結果封裝:
public class AliPayResultBean extends BaseBean {
/**
* 狀態代碼 String 本次操作的狀態返回值,標 識本次調用的結果,參見 “11.2 客戶端毛病碼”。 不可空 9000
*/
private String resultStatus;
/**
* 提示信息 String 保存參數,1般無內容。 可空
*/
private String memo;
/**
* 本次操作 返回的結 果數據 本次操作返回的結果數據。 其中: &success="true"&sign_typ
* e="RSA"&sign="xxx"之前 的部份為商戶的原始數據。 success用來標識本次支付 結果。 sign="xxx"為支付寶對本次
* 支付結果的簽名,商戶可以 使用簽約時支付寶提供的 公鑰進行驗證。 不可空 partner="2088101568358
* 171"&seller_id="alipay-te st09@alipay.com"&out_tr ade_no="0819145412⑹1
* 77"&subject="《暗黑破壞 神 3:凱恩之書》"&body=" 暴雪唯1官方授權中文版! 玩家必藏!附贈暗黑精致手
* 繪地圖!絕不單單是1本暗 黑的故事或畫冊,而是1 個栩栩如生的游戲再現。 是游戲玩家收藏的首選。
* "&total_fee="0.01"¬ify _url="http%3A%2F%2Fn otify.msp.hk%2Fnotify.ht
* m"&service="mobile.secu ritypay.pay"&payment_ty pe="1"&_input_charset="
* utf⑻"&it_b_pay="30m"&s how_url="m.alipay.com"& success="true"&sign_typ
* e="RSA"&sign="hkFZr+z E9499nuqDNLZEF7W75 RFFPsly876QuRSeN8W
* MaUgcdR00IKy5ZyBJ4el dhoJ/2zghqrD4E2G2mNj s3aE+HCLiBXrPDNdLKC
* ZgSOIqmv46TfPTEqopYf hs+o5fZzXxt34fwdrzN4m X6S13cr3UwmEV4L3Ffir
* /02RBVtU="
*/
private String result;
public String getResultStatus() {
return resultStatus;
}
public void setResultStatus(String resultStatus) {
this.resultStatus = resultStatus;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
}
注意:
調用了支付服務以后,有兩種方式返回交易結果:
上一篇 網絡字節序與主機字節序