支付寶SDK跟新版本疊代,大家可以選擇适合的自己的版本。
個人覺得改版本非常的穩定,頁面也是大衆APp支付界面。
建議先去申請企業 或者 個人開發者. http://act.life.alipay.com/shopping/before/help/index.html
先上張圖檔,壓壓驚 - ...
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcJTSU1EerdkYm50MZZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jN0UDN0ETN5EjMwITM0EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
支付寶流程圖:
圖中外部商務用戶端,是我們需要操作的:
1.調用支付接口
2.接收傳回結果資訊,自己根據邏輯處理
外部伺服器,是我們背景需要做的:
1.異步發送支付通知
2.接受響應
支付寶簽約成功會有4個重要的Key值:
這些都是簽約成功,得到的...
用簽約支付寶賬号登入 www.alipay.com 後,在商家服務頁面中擷取.
RSA密鑰生成指令
生成RSA私鑰
openssl>genrsa -out rsa_private_key.pem 1024
生成RSA公鑰
openssl>rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
将RSA私鑰轉換成PKCS8格式
openssl>pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
注意:“>”符号後面的才是需要輸入的指令。
可以參考:
移動支付接口智能SDK版.pdf & 移動支付接口智能SDK版接入與使用規則.pdf
Dome:
簡單 MainActivity:
/**
* 該本 移動支付接口智能SDK版(20140923)
* 目前比較穩定
* @author Neng
* @version 2014/12/1
*/
public class MainActivity extends Activity {
public static final String TAG = "MainActivity";
private static final int RQF_PAY = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onButton (View view){
//擷取拼接請求URL
String orderInfo = getOrderInfo("iphone6 plus", "土豪金", "0.01");
//URL 加密-(私鑰)
String sign = Rsa.sign(orderInfo, Keys.PRIVATE);
// 僅需對sign 做URL編碼
try {
// 僅需對sign 做URL編碼
sign = URLEncoder.encode(sign, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//最終URl
final String payInfo = orderInfo + "&sign=\"" + sign + "\"&"+ getSignType();
Log.d("最終URl :", payInfo);
//開啟線程啟動支付寶 - -
new Thread(new Runnable() {
@Override
public void run() {
//**------------AliPay 已經啟動支付寶,使用者操作流程,用戶端是不知道
AliPay alipay = new AliPay(MainActivity.this, mHandler);
//設定為沙箱模式,不設定預設為線上環境
//alipay.setSandBox(true);
//****支付操作完畢,傳回result結果
String result = alipay.pay(payInfo);
Log.i(TAG, "result = " + result);
Message msg = new Message();
msg.what = RQF_PAY;
msg.obj = result;
mHandler.sendMessage(msg);
}
}).start();
}
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what == RQF_PAY){
//Result主要對資料處理,字元串解析,這裡傳回不是json,隻能拆字段解析
Result result = new Result((String) msg.obj,Keys.PUBLIC);
Log.i(TAG, "狀态編号 = " + result.getResultStatus());
//我們需要提示内容不想要支付寶給的内容,這裡可以用自定義内容getHashMapV()
Log.i(TAG, "支付寶字段内容 = " + result.getMemo());
Log.i(TAG, "使用者自定義Hap内容 = " + result.getHashMapV());
//隻有成功支付後:支付寶會傳回你的公鑰,作為判斷依據
Log.i(TAG, "支付一緻?= " + result.getIsSignOk());
}
}
};
/**
* 建立訂單資訊
* @param subject 商品名稱
* @param body 商品詳情
* @param price 商品金額
* @return
*/
public String getOrderInfo(String subject, String body, String price) {
// 合作者身份ID
String orderInfo = "partner=" + "\"" + Keys.DEFAULT_PARTNER + "\"";
// 賣家支付寶賬号
orderInfo += "&seller_id=" + "\"" + Keys.DEFAULT_SELLER + "\"";
// 商戶網站唯一訂單号
orderInfo += "&out_trade_no=" + "\"" + getOutTradeNo() + "\"";
// 商品名稱
orderInfo += "&subject=" + "\"" + subject + "\"";
// 商品詳情
orderInfo += "&body=" + "\"" + body + "\"";
// 商品金額
orderInfo += "&total_fee=" + "\"" + price + "\"";
// 伺服器異步通知頁面路徑[伺服器背景回調用,可以預設]
orderInfo += "¬ify_url=" + "\"" + "http://notify.msp.hk/notify.htm"
+ "\"";
// 接口名稱, 固定值
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 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 String getSignType() {
return "sign_type=\"RSA\"";
}
}
記得把 alipay_lib項目 Library -
參考:支付寶Doem
作者簡單整理,歡迎轉載:http://blog.csdn.net/cs_li1126/article/details/41682597