Android-支付宝快捷支付

来源:互联网 发布:金牛期货软件怎么样 编辑:程序博客网 时间:2024/05/01 08:20

支付宝的快捷支付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.pemrsa_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配置如下:

<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<activityandroid:name="com.alipay.android.app.sdk.WapPayActivity"android:screenOrientation="portrait"></activity>
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 = "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")@Overrideprotected 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错误--报系统错误的 自己检查你的公钥 密钥在网站项目配置对不,大小写要注意;以下有出现过的错误及解决方案请补充.



2 0