Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android-支付寶快捷支付

Android-支付寶快捷支付

編輯:關於Android編程

支付寶的快捷支付Android版業務流程比較麻煩,出現的意外情況比較多.在此,簡單說下開發流程以及出現錯誤的解決方案;

1.注冊支付業務.這裡不在贅述.建立數據安全傳輸所需要的私鑰公鑰,這裡采用的是RSA算法:

打開開發包找到如下路徑,點擊openssl.exe打開dos操作界面:

\


輸入:

genrsa -out rsa_private_key.pem 1024

rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+vavJ+rPJ1Nq4w8S/wrzPwsn6s8k8c3Ryb25nPnJzYV9wcml2YXRlX2tleS5wZW08L3N0cm9uZz4gus08c3Ryb25nPnJzYV9wdWJsaWNfa2V5LnBlbTwvc3Ryb25nPsG9uPbOxLz+LjwvcD4KPHA+tPK/qtanuLaxprXEvefD5rXHwr0gyLu689Ta06bTw8Sjv+nA78PmsNFyc2FfcHVibGljX2tleS5wZW3W0LXEyv2+3crkyOu1vbmr1L/Eo7/pwO8sPC9wPgo8cD4oudjT2rmr1L/D3NS/tcTWqsq2ss6/vMeww+a3orHttcS147v3tPK/qsG0vdMpOzwvcD4KPHA+yOe4w87EvP7Tw87Esb7OxLW1tPK/qs6qPC9wPgo8cD4tLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLTxicj4KeHh4eHh4eHh4eHh4eHh4eHh4PC9wPgo8cD54eHh4eHh4eHh4eHh4eHh4eHg8YnI+Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLTxicj4KPC9wPgo8cD7U8s7Sw8fSqrvxyKG1xNa7ysctLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLdPrLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t1tC85LXExNrI3SyyorDRy/vDx9f3zqrSu7j219a3+7SuzOG9u7W9zfjVvsjnz8LOu9bDtcS12Le9yc/IpTo8L3A+CjxwPjxpbWcgc3JjPQ=="/uploadfile/Collfiles/20140718/20140718094558112.jpg" width="400" height="350" alt="\">

2.新建一個項目,設置android環境:

1)AndroidManifest.xml配置如下:


	
	
2)配置lib包:

>將alipay.jar放到lib目錄下(照道理他會自動生成lib文件,為了保險,選擇右鍵BuildPath>..導入);

>將alipay_msp.apk放到asseets目錄下,該包的作用是在沒移動支付應用的情況下自動提供安裝應用,如果不包含本包 將自動打開對應的版支付界面

>導入alipay_lib工程作為我們工程的資源工程,該工程必須跟我們的工程在同一層級目錄下,並作為android項目導入

\
點擊我們的應用,右鍵properties屬性,選擇如下圖:點擊add將lib項目導進去;

\

此時還有問題,因為android項目的原因,所以我們要把導入的資源全部頂置,不然系統有可能報資源找不到的原因;

\

3)代碼配置;創建key配置

public final class Keys {

	//合作身份者id,以2088開頭的16位純數字
	public static final String DEFAULT_PARTNER = "APPID";

	//收款支付寶賬號
	public static final String DEFAULT_SELLER = "[email protected]";

	//商戶私鑰,自助生成
	public static final String PRIVATE = "";

	public static final String PUBLIC = "";
}
從Demo中提取Base64.java Result.java Rsa.java到你的項目中

查找所有KeyFactory keyf = KeyFactory.getInstance("RSA");代碼修改為

KeyFactory keyf = KeyFactory.getInstance("RSA","BC");

調用代碼如參考如下:

public class MainActivity extends Activity {
	
	Handler mHandler=new Handler(){
		
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 0x123:
				System.out.println(msg.obj);
					Toast.makeText(MainActivity.this,msg.obj+"",
							Toast.LENGTH_SHORT).show();
				break;

			default:
				break;
			}
			
			
		};
		
	};

	@SuppressWarnings("deprecation")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		String info = getNewOrderInfo();
		String sign = Rsa.sign(info, Keys.PRIVATE);
		sign = URLEncoder.encode(sign);
		info += "&sign=\"" + sign + "\"&" + getSignType();
		final String orderInfo = info;
		new Thread() {
			public void run() {
				AliPay alipay = new AliPay(MainActivity.this, mHandler);
				String result = alipay.pay(orderInfo);
				Message msg = new Message();
				msg.what = 0x123;
				msg.obj = result;
				mHandler.sendMessage(msg);
			}
		}.start();
		
		
	}
	
	private String getNewOrderInfo() {
		StringBuilder sb = new StringBuilder();
		sb.append("partner=\"");
		sb.append(Keys.DEFAULT_PARTNER);
		sb.append("\"&out_trade_no=\"");
		sb.append("12312313124451");
		sb.append("\"&subject=\"");
		sb.append("商品名..");
		sb.append("\"&body=\"");
		sb.append("商品描述..");
		sb.append("\"&total_fee=\"");
		sb.append("0.01");
		sb.append("\"¬ify_url=\"");

		// 網址需要做URL編碼
		sb.append(URLEncoder.encode("http://notify.java.jpxx.org/index.jsp"));
		sb.append("\"&service=\"mobile.securitypay.pay");
		sb.append("\"&_input_charset=\"UTF-8");
		sb.append("\"&return_url=\"");
		sb.append(URLEncoder.encode("http://m.alipay.com"));
		sb.append("\"&payment_type=\"1");
		sb.append("\"&seller_id=\"");
		sb.append(Keys.DEFAULT_SELLER);

		// 如果show_url值為空,可不傳
		// sb.append("\"&show_url=\"");
		sb.append("\"&it_b_pay=\"1m");
		sb.append("\"");

		return new String(sb);
	}
	
	private String getSignType() {
		return "sign_type=\"RSA\"";
	}
	
}
發送的商品參數與返回的商品參數根據自己的業務修改;


Tip:9000錯誤--報系統錯誤的 自己檢查你的公鑰 密鑰在網站項目配置對不,大小寫要注意;以下有出現過的錯誤及解決方案請補充.



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved