支付宝的快捷支付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
将生成在该文件夹下生成rsa_private_key.pem 和rsa_public_key.pem两个文件.
打开支付宝的界面登陆 然后在应用模块里面把rsa_public_key.pem中的数据输入到公钥模块里,
(关于公钥密钥的知识參考前面发表的);
如该文件用文本文档打开为
-----BEGIN PUBLIC KEY----- xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx -----END PUBLIC KEY-----
则我们要获取的仅仅是-----BEGIN PUBLIC KEY-----与-----END PUBLIC KEY-----中间的内容,并把他们作为一个字符串提交到站点例如以下位置的地方上去:
2.新建一个项目,设置android环境:
1)AndroidManifest.xml配置例如以下:
2)配置lib包:
>将alipay.jar放到lib文件夹下(照道理他会自己主动生成lib文件,为了保险,选择右键BuildPath>..导入);
>将alipay_msp.apk放到asseets文件夹下,该包的作用是在没移动支付应用的情况下自己主动提供安装应用,假设不包括本包 将自己主动打开相应的版支付界面
>导入alipay_libproject作为我们project的资源project,该project必须跟我们的project在同一层级文件夹下,并作为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 = "ssssss@163.com"; //商户私钥,自助生成 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错误--报系统错误的 自己检查你的公钥 密钥在站点项目配置对不,大写和小写要注意;下面有出现过的错误及解决方式请补充.