新进的项目需要使用支付宝。于是边学习边记录:
刚接触。还没下手,先读文档。
先前准备工作就不记录了。
1、添加jar文件 alipay_msp.jar
2、初始化安全支付服务:
private ServiceConnection mAlixPayConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
// Wake up the binder to continue.
synchronized (lock) {
mAlixPay = IAlixPay.Stub.asInterface(service);
lock.notify();
}
}
public void onServiceDisconnected(ComponentName className) {
mAlixPay = null;
}
};
...
// Bind the service, then can call the service.
mActivity.bindService(new Intent(IAlixPay.class.getName()),
mAlixPayConnection, Context.BIND_AUTO_CREATE);
3、生成订单数据:
在调用安全支付时,需要提交订单信息orderInfo。参数以“key=value”形式提交,参数之间用&分隔。所有参数不可缺。:
partner="支付宝分配的合作商户ID"
&seller="账户ID"
&out_trade_no="唯一交易号"
&subject=商品名称""
&body="商品描述"
&total_fee="价格"
¬ify_url="订单支付完成通知URL"
&sign="商品信息前面" //对数据签名后得到的sign值必须进行URLEncode之后,才可作为参数。
&sign_type="RSA"
4、调用安全支付:
result = mAlixPay.Pay(orderInfo); //AliXPay函数具体说明请见AlixPay方法描述。
5、支付结果获取和处理:(参看demo中的ResultChecker.java)
调用安全支付后,将通过两种途径获得支付结果:
1、AliXpay.pay()方法的返回结果
该方法将返回表示支付结果的字符串
2、支付宝服务器通知
商户需要提供一个http协议的接口,包含在参数里面传递给安全支付,即:notify_url。支付宝服务器在支付完成后,会用POST方法调用notufy_url,以xml为数据格式传输支付结果。
alipay_plugin.apk运行时安装方法:
1)将alipay_plugin.apk作为资源复制到第三方工程的assets目录
2)第三方应用在适当时机,闲检测安全支付服务是否已经安装。如尚未安装,则从assets目录中提取alipay_plugin.apk到手机存储。
3)安装手机存储中的安全支付服务apk。
// Install the APK of SecurePayment which is included in the merchant’s App.
public boolean retrieveApkFromAssets(Context context, String fileName,
String path) {
boolean isRetrieve = false;
InputStream input = null;
FileOutputStream output = null;
try {
input = context.getAssets().open(fileName);
File file = new File(path);
file.createNewFile();
output = new FileOutputStream(file);
byte[] temp = new byte[1024];
int i = 0;
while ((i = input.read(temp)) > 0) {
output.write(temp, 0, i);
}
isRetrieve = true
} catch (IOException e) {
e.printStackTrace ();
}finally{
if(output != null){
try {
output.close();
} catch (IOException e) {
}
}
if(input != null){
try {
input.close();
} catch (IOException e) {
}
}
}
return isRetrieve;
}
//install apk from the path
public installAPK(Context context,String path){
Intent installIntent = new Intent(Intent.ACTION_VIEW);
installIntent.setDataAndType(Uri.parse("file://"+path,"application/vnd.android.package-archive");
context.startActivity(installIntent);
}
//if you want to download the apk.You can :
public boolean retrieveApkFromNet(Context context, String strurl,
String filename) {
boolean isRetrieve = false;
try {
NetworkManager networkManager = new NetworkManager(this.mContext);
isRetrieve = networkManager.downloadToFile(context, strurl,
filename);
} catch (Exception e) {
e.printStackTrace();
}
return isRetrieve;
}