如题所述
ãã1.ä¸è½½å®æ¹æ¶å
å说æææ¡£
ããå ¶å®å®æ¹å·²ç»æä¾äºå®è£ æå,
ããéé¢ææ个pdfï¼è¯¦ç»è¯´æäºè¯´ç¨æåï¼åçæ¯è¾è¯¦ç»ï¼å¯ä»¥éç¹åèã
ããä¸è½½ä¸æ¥ï¼æ们主è¦æ¯ç¨å°Android(20120104)ç®å½ä¸çalipay_plugin.jaråAppDemo/assetsä¸çalipay_plugin223_0309.apkï¼è¿ä¸¤ä¸ªæ件æ¯æ们ä¸è½ä¿®æ¹çæ¯ä»å®apiåå®è£ å ã
ãã2. åæ·ç¾çº¦
ããç°å¨çå®å ¨æºå¶ï¼é½æ¯è¿æ ·ï¼å®¢æ·ç«¯éè¦å åæå¡ç«¯è¯·æ±éªè¯åæè½è¿è¡è¿ä¸æ¥æä½ï¼oauthä¹æ¯å¦æ¤ã
ããæå¼ç»éæ¯ä»å®ï¼ç¹å»ç¾çº¦å ¥å£ï¼éæ©"åºç¨ç±»äº§å"ï¼å¡«å并çå¾ å®¡æ ¸ï¼è·ååæ·IDåè´¦æ·IDã
ããç¾çº¦çæ¶åè¿è¦åéè¦æä¾å®å认è¯åä¸ä¼ åºç¨ï¼æ以æ建议å æåºç¨å好äºï¼æååéææ¯ä»å®ã
ããæ大æ¦çäº1-2å¤©å®¡æ ¸ï¼å®¡æ ¸æ¯å¤±è´¥çï¼åå¤æ¯åºç¨ç±»åå¥çåºè¯¥æ¯"èæè´§å¸"ï¼ææ¹æé£ä¸ªé©¬ä¸èªå¨å°±å®¡æ ¸éè¿äºã
ãã3.å¯é¥é ç½®
ãã解åopenssl-0.9.8k_WIN32(RSAå¯é¥çæå·¥å ·).zipï¼æå¼cmdï¼å½ä»¤è¡è¿å ¥openssl-0.9.8k_WIN32(RSAå¯é¥çæå·¥å ·)\binç®å½ä¸ï¼
ãã(1).æ§è¡
ããopenssl genrsa -out rsa_private_key.pem 1024
ããçærsa_private_key.pemæ件ã
ãã(2).åæ§è¡
ããopenssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
ããçærsa_public_key.pem æ件ã
ãã(3).å¨æ§è¡
ããopenssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
ããå°RSAç§é¥è½¬æ¢æ PKCS8 æ ¼å¼ï¼å»æbeginåendé£ä¸¤è¡ï¼æéé¢çå 容æ·è´åºæ¥ï¼ä¿åå°æ个txtä¸ï¼å¦rsa_private_pkcs8_key.txtä¸ï¼æ好å没ç¨å°è¿ä¸ªï¼ã
ããæ å¼rsa_public_key.pem,å³åæ·çå ¬é¥ï¼å¤å¶å°ä¸ä¸ªæ°çTXTä¸ï¼å é¤æ件头â-----BEGIN PUBLIC KEY-----âä¸æ件尾â-----END PUBLIC KEY-----âè¿æç©ºæ ¼ãæ¢è¡ï¼åæä¸è¡å符串并ä¿å该 TXT æ件ï¼ç¶åå¨ç½ç«çâæçå家æå¡âåæ¢å¡ä¸çå³è¾¹ç¹å»âå¯é¥ç®¡çâï¼ç¶åæ个"ä¸ä¼ åæ·å ¬é¥(RSA)"项ï¼éæ©ä¸ä¼ åæçTXTæ件.
ãã好äºï¼æå¡å¨é ç½®OKï¼å 为è¿ä¸æ®µä¹å没ææªå¾ï¼ç°å¨å¼å¥½äºåä¸å¥½æªå¾ï¼å¦ææä¸æç½çå°æ¹è¯·å¤§å®¶åèå®æ¹ææ¡£ã
ãã4.å¼ç¨jaråå å«å®è£ å
ãã(1).æ°å»ºandroidå·¥ç¨ï¼
ãã(2).copyä¸é¢è¯´çalipay_plugin.jarå°å·¥ç¨çlibsç®å½ä¸ï¼å¹¶å¨java build pathä¸éè¿Add External JARsæ¾å°å¹¶å¼ç¨è¯¥jarï¼
ãã(3).copyä¸é¢è¯´çalipay_plugin223_0309.apkå®è£ å å°assetsç®å½ä¸ï¼åé¢é 置路å¾ç¨å°ã
ãã\
ããå¦ælibsåassetsç®å½æ²¡æï¼æå¨å»ºç«è 两个ç®å½ã
ãã5.è°ç¨ä»£ç æ´ç
ããè¿éæ们è¦ä¸¥éçåèææ¡£ä¸AppDemoï¼æ们建ä¸ä¸ªå com.tianxia.lib.baseworld.alipayï¼æAppDemoçcom.alipay.android.appDemo4å ä¸ç æºç å ¨é¨copyå°åææ们èªå·±çå ä¸ï¼è¿æresç®å½ä¸çèµæºæ件ä¹å并å°æ们工ç¨resä¸ã
ããå ¶ä¸AlixDemo.java,ProductListAdapter.java,Products.javaæ¯ç¤ºä¾ç±»ï¼æ们åé´å®åå¯ä»¥å é¤ã
ããPartnerConfig.javaæ¯é 置类ï¼é ç½®åæ·çä¸äºé ç½®åæ°ã
ããå ¶ä»çç±»æ¯ä¸¥éåèç±»ï¼ç´æ¥çä¸ä½¿ç¨ã
ããPartnerConfig.java代ç å¦ä¸:
ããpublic class PartnerConfig { //åä½åæ·IDãç¨ç¾çº¦æ¯ä»å®è´¦å·ç»å½ms.alipay.comåï¼å¨è´¦æ·ä¿¡æ¯é¡µé¢è·åã public static final String PARTNER = "xxx"; //è´¦æ·IDãç¨ç¾çº¦æ¯ä»å®è´¦å·ç»å½ms.alipay.comåï¼å¨è´¦æ·ä¿¡æ¯é¡µé¢è·åã public static final String SELLER = "xxx"; //åæ·ï¼RSAï¼ç§é¥ ,å³rsa_private_key.pemä¸å»æé¦è¡ï¼æåä¸è¡ï¼ç©ºæ ¼åæ¢è¡æåæ¼æä¸è¡çå符串 public static final String RSA_PRIVATE = "xxx"; //æ¯ä»å®ï¼RSAï¼å ¬é¥ ç¨ç¾çº¦æ¯ä»å®è´¦å·ç»å½ms.alipay.comåï¼å¨å¯é¥ç®¡ç页é¢è·åã public static final String RSA_ALIPAY_PUBLIC = "xxx"; //ä¸é¢çé ç½®åè¯åºç¨å»assetsç®å½ä¸æ¾å®è£ å public static final String ALIPAY_PLUGIN_NAME ="alipay_plugin223_0309.apk";}
ããAlixDemoä¸ä»£ç æ¯æç»çè°ç¨ä»£ç å¨onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {}ä¸ï¼ä¸é¢æ们æåå ¶ä¸çæ ¸å¿ä»£ç ã
ãã6.æåæ ¸å¿è°ç¨ä»£ç
ããå¨AlixDemo.javaåç®å½ä¸æ°å»ºAlixPay.java,æ¥æåAlixDemo.javaçæ ¸å¿ä»£ç ï¼
ããpackage com.tianxia.lib.baseworld.alipay;import java.net.URLEncoder;import java.text.SimpleDateFormat;import java.util.Date;import com.tianxia.lib.baseworld.R;import android.app.Activity;import android.app.ProgressDialog;import android.content.DialogInterface;import android.os.Handler;import android.os.Message;import android.view.KeyEvent;import android.widget.Toast;public class AlixPay { static String TAG = "AlixPay"; private Activity mActivity; public AlixPay(Activity activity) { mActivity = activity; } private ProgressDialog mProgress = null; // the handler use to receive the pay result. private Handler mHandler = new Handler() { public void handleMessage(Message msg) { try { String strRet = (String) msg.obj; switch (msg.what) { case AlixId.RQF_PAY: { closeProgress(); BaseHelper.log(TAG, strRet); try { String memo = "memo="; int imemoStart = strRet.indexOf("memo="); imemoStart += memo.length(); int imemoEnd = strRet.indexOf(";result="); memo = strRet.substring(imemoStart, imemoEnd); ResultChecker resultChecker = new ResultChecker(strRet); int retVal = resultChecker.checkSign(); if (retVal == ResultChecker.RESULT_CHECK_SIGN_FAILED) { BaseHelper.showDialog( mActivity, "æ示", mActivity.getResources().getString( R.string.check_sign_failed), android.R.drawable.ic_dialog_alert); } else { BaseHelper.showDialog(mActivity, "æ示", memo, R.drawable.infoicon); } } catch (Exception e) { e.printStackTrace(); BaseHelper.showDialog(mActivity, "æ示", strRet, R.drawable.infoicon); } } break; } super.handleMessage(msg); } catch (Exception e) { e.printStackTrace(); } } }; // close the progress bar void closeProgress() { try { if (mProgress != null) { mProgress.dismiss(); mProgress = null; } } catch (Exception e) { e.printStackTrace(); } } public void pay() { MobileSecurePayHelper mspHelper = new MobileSecurePayHelper(mActivity); boolean isMobile_spExist = mspHelper.detectMobile_sp(); if (!isMobile_spExist) return; if (!checkInfo()) { BaseHelper.showDialog(mActivity, "æ示", "缺å°partneræè sellerï¼", R.drawable.infoicon); return; } try { // prepare the order info. String orderInfo = getOrderInfo(); String signType = getSignType(); String strsign = sign(signType, orderInfo); strsign = URLEncoder.encode(strsign); String info = orderInfo + "&sign=" + "\"" + strsign + "\"" + "&" + getSignType(); // start the pay. MobileSecurePayer msp = new MobileSecurePayer(); boolean bRet = msp.pay(info, mHandler, AlixId.RQF_PAY, mActivity); if (bRet) { // show the progress bar to indicate that we have started paying. closeProgress(); mProgress = BaseHelper.showProgress(mActivity, null, "æ£å¨æ¯ä»", false, true); } else ; } catch (Exception ex) { Toast.makeText(mActivity, R.string.remote_call_failed, Toast.LENGTH_SHORT).show(); } } private boolean checkInfo() { String partner = PartnerConfig.PARTNER; String seller = PartnerConfig.SELLER; if (partner == null || partner.length() <= 0 || seller == null || seller.length() <= 0) return false; return true; } // get the selected order info for pay. String getOrderInfo() { String strOrderInfo = "partner=" + "\"" + PartnerConfig.PARTNER + "\""; strOrderInfo += "&"; strOrderInfo += "seller=" + "\"" + PartnerConfig.SELLER + "\""; strOrderInfo += "&"; strOrderInfo += "out_trade_no=" + "\"" + getOutTradeNo() + "\""; strOrderInfo += "&"; //è¿ç¬äº¤æä»·é± strOrderInfo += "subject=" + "\"" + mActivity.getString(R.string.donate_subject) + "\""; strOrderInfo += "&"; //è¿ç¬äº¤æå 容 strOrderInfo += "body=" + "\"" + mActivity.getString(R.string.donate_body) + "\""; strOrderInfo += "&"; //è¿ç¬äº¤æä»·é± strOrderInfo += "total_fee=" + "\"" + "10.00" + "\""; strOrderInfo += "&"; strOrderInfo += "notify_url=" + "\"" + "http://notify.java.jpxx.org/index.jsp" + "\""; return strOrderInfo; } // get the out_trade_no for an order. String getOutTradeNo() { SimpleDateFormat format = new SimpleDateFormat("MMddHHmmss"); Date date = new Date(); String strKey = format.format(date); java.util.Random r = new java.util.Random(); strKey = strKey + r.nextInt(); strKey = strKey.substring(0, 15); return strKey; } // get the sign type we use. String getSignType() { String getSignType = "sign_type=" + "\"" + "RSA" + "\""; return getSignType; } // sign the order info. String sign(String signType, String content) { return Rsa.sign(content, PartnerConfig.RSA_PRIVATE); } // the OnCancelListener for lephone platform. static class AlixOnCancelListener implements DialogInterface.OnCancelListener { Activity mcontext; AlixOnCancelListener(Activity context) { mcontext = context; } public void onCancel(DialogInterface dialog) { mcontext.onKeyDown(KeyEvent.KEYCODE_BACK, null); } }}
ããè¿ä¸ªç±»çpayæ¹æ³å°±æ¯æ¯ä»çæ¹æ³ï¼æç®åçä¸è®¾ç½®çè¯ï¼è°ç¨æ¹æ³å¦ä¸ï¼
ããAlixPay alixPay = new AlixPay(SettingTabActivity.this);alixPay.pay();
ããå ¶å®å®æ¹å·²ç»æä¾äºå®è£ æå,
ããéé¢ææ个pdfï¼è¯¦ç»è¯´æäºè¯´ç¨æåï¼åçæ¯è¾è¯¦ç»ï¼å¯ä»¥éç¹åèã
ããä¸è½½ä¸æ¥ï¼æ们主è¦æ¯ç¨å°Android(20120104)ç®å½ä¸çalipay_plugin.jaråAppDemo/assetsä¸çalipay_plugin223_0309.apkï¼è¿ä¸¤ä¸ªæ件æ¯æ们ä¸è½ä¿®æ¹çæ¯ä»å®apiåå®è£ å ã
ãã2. åæ·ç¾çº¦
ããç°å¨çå®å ¨æºå¶ï¼é½æ¯è¿æ ·ï¼å®¢æ·ç«¯éè¦å åæå¡ç«¯è¯·æ±éªè¯åæè½è¿è¡è¿ä¸æ¥æä½ï¼oauthä¹æ¯å¦æ¤ã
ããæå¼ç»éæ¯ä»å®ï¼ç¹å»ç¾çº¦å ¥å£ï¼éæ©"åºç¨ç±»äº§å"ï¼å¡«å并çå¾ å®¡æ ¸ï¼è·ååæ·IDåè´¦æ·IDã
ããç¾çº¦çæ¶åè¿è¦åéè¦æä¾å®å认è¯åä¸ä¼ åºç¨ï¼æ以æ建议å æåºç¨å好äºï¼æååéææ¯ä»å®ã
ããæ大æ¦çäº1-2å¤©å®¡æ ¸ï¼å®¡æ ¸æ¯å¤±è´¥çï¼åå¤æ¯åºç¨ç±»åå¥çåºè¯¥æ¯"èæè´§å¸"ï¼ææ¹æé£ä¸ªé©¬ä¸èªå¨å°±å®¡æ ¸éè¿äºã
ãã3.å¯é¥é ç½®
ãã解åopenssl-0.9.8k_WIN32(RSAå¯é¥çæå·¥å ·).zipï¼æå¼cmdï¼å½ä»¤è¡è¿å ¥openssl-0.9.8k_WIN32(RSAå¯é¥çæå·¥å ·)\binç®å½ä¸ï¼
ãã(1).æ§è¡
ããopenssl genrsa -out rsa_private_key.pem 1024
ããçærsa_private_key.pemæ件ã
ãã(2).åæ§è¡
ããopenssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
ããçærsa_public_key.pem æ件ã
ãã(3).å¨æ§è¡
ããopenssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
ããå°RSAç§é¥è½¬æ¢æ PKCS8 æ ¼å¼ï¼å»æbeginåendé£ä¸¤è¡ï¼æéé¢çå 容æ·è´åºæ¥ï¼ä¿åå°æ个txtä¸ï¼å¦rsa_private_pkcs8_key.txtä¸ï¼æ好å没ç¨å°è¿ä¸ªï¼ã
ããæ å¼rsa_public_key.pem,å³åæ·çå ¬é¥ï¼å¤å¶å°ä¸ä¸ªæ°çTXTä¸ï¼å é¤æ件头â-----BEGIN PUBLIC KEY-----âä¸æ件尾â-----END PUBLIC KEY-----âè¿æç©ºæ ¼ãæ¢è¡ï¼åæä¸è¡å符串并ä¿å该 TXT æ件ï¼ç¶åå¨ç½ç«çâæçå家æå¡âåæ¢å¡ä¸çå³è¾¹ç¹å»âå¯é¥ç®¡çâï¼ç¶åæ个"ä¸ä¼ åæ·å ¬é¥(RSA)"项ï¼éæ©ä¸ä¼ åæçTXTæ件.
ãã好äºï¼æå¡å¨é ç½®OKï¼å 为è¿ä¸æ®µä¹å没ææªå¾ï¼ç°å¨å¼å¥½äºåä¸å¥½æªå¾ï¼å¦ææä¸æç½çå°æ¹è¯·å¤§å®¶åèå®æ¹ææ¡£ã
ãã4.å¼ç¨jaråå å«å®è£ å
ãã(1).æ°å»ºandroidå·¥ç¨ï¼
ãã(2).copyä¸é¢è¯´çalipay_plugin.jarå°å·¥ç¨çlibsç®å½ä¸ï¼å¹¶å¨java build pathä¸éè¿Add External JARsæ¾å°å¹¶å¼ç¨è¯¥jarï¼
ãã(3).copyä¸é¢è¯´çalipay_plugin223_0309.apkå®è£ å å°assetsç®å½ä¸ï¼åé¢é 置路å¾ç¨å°ã
ãã\
ããå¦ælibsåassetsç®å½æ²¡æï¼æå¨å»ºç«è 两个ç®å½ã
ãã5.è°ç¨ä»£ç æ´ç
ããè¿éæ们è¦ä¸¥éçåèææ¡£ä¸AppDemoï¼æ们建ä¸ä¸ªå com.tianxia.lib.baseworld.alipayï¼æAppDemoçcom.alipay.android.appDemo4å ä¸ç æºç å ¨é¨copyå°åææ们èªå·±çå ä¸ï¼è¿æresç®å½ä¸çèµæºæ件ä¹å并å°æ们工ç¨resä¸ã
ããå ¶ä¸AlixDemo.java,ProductListAdapter.java,Products.javaæ¯ç¤ºä¾ç±»ï¼æ们åé´å®åå¯ä»¥å é¤ã
ããPartnerConfig.javaæ¯é 置类ï¼é ç½®åæ·çä¸äºé ç½®åæ°ã
ããå ¶ä»çç±»æ¯ä¸¥éåèç±»ï¼ç´æ¥çä¸ä½¿ç¨ã
ããPartnerConfig.java代ç å¦ä¸:
ããpublic class PartnerConfig { //åä½åæ·IDãç¨ç¾çº¦æ¯ä»å®è´¦å·ç»å½ms.alipay.comåï¼å¨è´¦æ·ä¿¡æ¯é¡µé¢è·åã public static final String PARTNER = "xxx"; //è´¦æ·IDãç¨ç¾çº¦æ¯ä»å®è´¦å·ç»å½ms.alipay.comåï¼å¨è´¦æ·ä¿¡æ¯é¡µé¢è·åã public static final String SELLER = "xxx"; //åæ·ï¼RSAï¼ç§é¥ ,å³rsa_private_key.pemä¸å»æé¦è¡ï¼æåä¸è¡ï¼ç©ºæ ¼åæ¢è¡æåæ¼æä¸è¡çå符串 public static final String RSA_PRIVATE = "xxx"; //æ¯ä»å®ï¼RSAï¼å ¬é¥ ç¨ç¾çº¦æ¯ä»å®è´¦å·ç»å½ms.alipay.comåï¼å¨å¯é¥ç®¡ç页é¢è·åã public static final String RSA_ALIPAY_PUBLIC = "xxx"; //ä¸é¢çé ç½®åè¯åºç¨å»assetsç®å½ä¸æ¾å®è£ å public static final String ALIPAY_PLUGIN_NAME ="alipay_plugin223_0309.apk";}
ããAlixDemoä¸ä»£ç æ¯æç»çè°ç¨ä»£ç å¨onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {}ä¸ï¼ä¸é¢æ们æåå ¶ä¸çæ ¸å¿ä»£ç ã
ãã6.æåæ ¸å¿è°ç¨ä»£ç
ããå¨AlixDemo.javaåç®å½ä¸æ°å»ºAlixPay.java,æ¥æåAlixDemo.javaçæ ¸å¿ä»£ç ï¼
ããpackage com.tianxia.lib.baseworld.alipay;import java.net.URLEncoder;import java.text.SimpleDateFormat;import java.util.Date;import com.tianxia.lib.baseworld.R;import android.app.Activity;import android.app.ProgressDialog;import android.content.DialogInterface;import android.os.Handler;import android.os.Message;import android.view.KeyEvent;import android.widget.Toast;public class AlixPay { static String TAG = "AlixPay"; private Activity mActivity; public AlixPay(Activity activity) { mActivity = activity; } private ProgressDialog mProgress = null; // the handler use to receive the pay result. private Handler mHandler = new Handler() { public void handleMessage(Message msg) { try { String strRet = (String) msg.obj; switch (msg.what) { case AlixId.RQF_PAY: { closeProgress(); BaseHelper.log(TAG, strRet); try { String memo = "memo="; int imemoStart = strRet.indexOf("memo="); imemoStart += memo.length(); int imemoEnd = strRet.indexOf(";result="); memo = strRet.substring(imemoStart, imemoEnd); ResultChecker resultChecker = new ResultChecker(strRet); int retVal = resultChecker.checkSign(); if (retVal == ResultChecker.RESULT_CHECK_SIGN_FAILED) { BaseHelper.showDialog( mActivity, "æ示", mActivity.getResources().getString( R.string.check_sign_failed), android.R.drawable.ic_dialog_alert); } else { BaseHelper.showDialog(mActivity, "æ示", memo, R.drawable.infoicon); } } catch (Exception e) { e.printStackTrace(); BaseHelper.showDialog(mActivity, "æ示", strRet, R.drawable.infoicon); } } break; } super.handleMessage(msg); } catch (Exception e) { e.printStackTrace(); } } }; // close the progress bar void closeProgress() { try { if (mProgress != null) { mProgress.dismiss(); mProgress = null; } } catch (Exception e) { e.printStackTrace(); } } public void pay() { MobileSecurePayHelper mspHelper = new MobileSecurePayHelper(mActivity); boolean isMobile_spExist = mspHelper.detectMobile_sp(); if (!isMobile_spExist) return; if (!checkInfo()) { BaseHelper.showDialog(mActivity, "æ示", "缺å°partneræè sellerï¼", R.drawable.infoicon); return; } try { // prepare the order info. String orderInfo = getOrderInfo(); String signType = getSignType(); String strsign = sign(signType, orderInfo); strsign = URLEncoder.encode(strsign); String info = orderInfo + "&sign=" + "\"" + strsign + "\"" + "&" + getSignType(); // start the pay. MobileSecurePayer msp = new MobileSecurePayer(); boolean bRet = msp.pay(info, mHandler, AlixId.RQF_PAY, mActivity); if (bRet) { // show the progress bar to indicate that we have started paying. closeProgress(); mProgress = BaseHelper.showProgress(mActivity, null, "æ£å¨æ¯ä»", false, true); } else ; } catch (Exception ex) { Toast.makeText(mActivity, R.string.remote_call_failed, Toast.LENGTH_SHORT).show(); } } private boolean checkInfo() { String partner = PartnerConfig.PARTNER; String seller = PartnerConfig.SELLER; if (partner == null || partner.length() <= 0 || seller == null || seller.length() <= 0) return false; return true; } // get the selected order info for pay. String getOrderInfo() { String strOrderInfo = "partner=" + "\"" + PartnerConfig.PARTNER + "\""; strOrderInfo += "&"; strOrderInfo += "seller=" + "\"" + PartnerConfig.SELLER + "\""; strOrderInfo += "&"; strOrderInfo += "out_trade_no=" + "\"" + getOutTradeNo() + "\""; strOrderInfo += "&"; //è¿ç¬äº¤æä»·é± strOrderInfo += "subject=" + "\"" + mActivity.getString(R.string.donate_subject) + "\""; strOrderInfo += "&"; //è¿ç¬äº¤æå 容 strOrderInfo += "body=" + "\"" + mActivity.getString(R.string.donate_body) + "\""; strOrderInfo += "&"; //è¿ç¬äº¤æä»·é± strOrderInfo += "total_fee=" + "\"" + "10.00" + "\""; strOrderInfo += "&"; strOrderInfo += "notify_url=" + "\"" + "http://notify.java.jpxx.org/index.jsp" + "\""; return strOrderInfo; } // get the out_trade_no for an order. String getOutTradeNo() { SimpleDateFormat format = new SimpleDateFormat("MMddHHmmss"); Date date = new Date(); String strKey = format.format(date); java.util.Random r = new java.util.Random(); strKey = strKey + r.nextInt(); strKey = strKey.substring(0, 15); return strKey; } // get the sign type we use. String getSignType() { String getSignType = "sign_type=" + "\"" + "RSA" + "\""; return getSignType; } // sign the order info. String sign(String signType, String content) { return Rsa.sign(content, PartnerConfig.RSA_PRIVATE); } // the OnCancelListener for lephone platform. static class AlixOnCancelListener implements DialogInterface.OnCancelListener { Activity mcontext; AlixOnCancelListener(Activity context) { mcontext = context; } public void onCancel(DialogInterface dialog) { mcontext.onKeyDown(KeyEvent.KEYCODE_BACK, null); } }}
ããè¿ä¸ªç±»çpayæ¹æ³å°±æ¯æ¯ä»çæ¹æ³ï¼æç®åçä¸è®¾ç½®çè¯ï¼è°ç¨æ¹æ³å¦ä¸ï¼
ããAlixPay alixPay = new AlixPay(SettingTabActivity.this);alixPay.pay();
温馨提示:答案为网友推荐,仅供参考