Android支付宝移动支付的实现
登陆www.alipay.com
注意的是账户必须是企业账户
登陆-》产品商店-》移动快捷支付-》在线签约条件
-》应用或其他附件-》上传文档(其他信息默认)
-》同意并提交-》等待审核
-》审核通过-》进入首页-》签约管理-》下载技术集成文档
-》导入alipay_lib与alipay_sdk_demo
打开alipay_sdk_demo目录中的Keys.java文件:
public final class Keys{
//合作身份者id,以2088开头的16位纯数字
public static final String DEFAULT_PARTNER = "";//可在签约管理中的“查看PID|Key”获取
//手快支付宝账号
public static final String DEFAULT_SELLER = "";//企业账户的支付宝
//商户私钥,自动生成
public static final String PRIVATE = "";//运行下载SDK里的opessl,再按“生成命令.txt”文件提示操作即可生成一个私钥以及一个公钥,公钥要放在服务器中-》在签约管理中的“查看PID|Key”输入密码之后再在RAS(公钥)编辑框中复制进去提交即可。
public static final String PUBLIC = "MIGFMA0GCSqGSIb3DQ...";//默认已有
}
如果没有配置以上信息静 demon 将无法支付。支付是否成功可在logcat中查看,真实的数据可以在服务端的”卖出商品“中查看
具体实现可结合 demon 与 移动快捷支付应用集成接入包支付接口文档。
创建一个项目项目FNCT:
导入alipay.jar包以及引用alipay_lib库,再把官方提供的Demon中的java文件除了ExternalPartner.java文件之外的必须文件都复制到我们的项目中
再把权限以及<activity>文件的配置复制过来。
在activity_main.xml中:
<Button
android:onClick="clickMonth"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="月费会员¥30/月"/>
<Button
android:onClick="clickYear"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="年费会员¥260/年"/>
在MainActivity.java文件中:
public void clickMonth(View view){
StringBuilder sb = new StringBuilder();
sb.append("partner=\*");
sb.append("Keys.DEFAULT_PARTNER");
sb.append("\*&out_trade_no=\*");
sb.append(getOutTradeNo());//用到的方法直接从demon中复制过来
sb.append("\*&subject=\*");
sb.append("月费会员");
sb.append("\*&body=\*");
sb.append("月费会员的内容");
sb.append("\*&total_fee=\8");
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("\*");
String info = sb.toString();
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, handler);
String result = alipay.pay(orderInfo);
Log.i(TAG, "result = " + result);
Message msg = new Message();
msg.what = RQF_PAY;
msg.obj = result;
handler.sendMessage(msg);
}
}.start();
}
Handler handler = new Handler(){
public void handleMessage(android.os.Message msg){
Result result = new Result((String) msg.obj);
switch(msg.what){
case RQF_PAY:
case RQF_LOGIN:{
Toast.makeText(MainActivity.this, result.getResult(),
1).show();
}
break;
default:
break;
}
}
}
private static final String TAG = "FNCT";
private static final int RQF_PAY = 1;
private static final int RQF_LOGIN = 2;