博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android-支付宝快捷支付
阅读量:6701 次
发布时间:2019-06-25

本文共 3450 字,大约阅读时间需要 11 分钟。

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

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错误--报系统错误的 自己检查你的公钥 密钥在站点项目配置对不,大写和小写要注意;下面有出现过的错误及解决方式请补充.

你可能感兴趣的文章
Bad Request (Invalid Hostname)解决方法
查看>>
indy10 UDP实例
查看>>
POJ1274 The Perfect Stall(二分图)
查看>>
记录的习惯
查看>>
shell MAC 地址 校验
查看>>
函数式C代码
查看>>
一个10年SEO工作者的35个SEO经验
查看>>
待整理
查看>>
2016-8-2更新日志
查看>>
【Project3】技术总结
查看>>
mysql my.cnf 配置建议
查看>>
jQuery 鼠标滚轮插件应用 mousewheel
查看>>
php过滤html标签截取部分内容
查看>>
【NOIP2010】【P1317】乌龟棋
查看>>
makefile——小试牛刀
查看>>
bzoj 1084 DP
查看>>
【HNOI】 lct tree-dp
查看>>
Hive 1.2.1&Spark&Sqoop安装指南
查看>>
wordpress教程:默认http头信息X-Pingback的隐藏与修改
查看>>
iOS开发UI篇—CALayer简介
查看>>