浅谈android接入银联,支付宝支付平台的方式

笔者因为项目需要,接入了第三方支付平台,从最开始的银联,到最后的微信,其中出现了各种BUG问题,到最后的顺利接入,完成支付。现在写一篇简单的博客,记录一下,方便自己日后查阅,也给后面接入的程序猿们一个参考。

话不多说 ,下面开始写了,


笔者使用的开发工具为Android Developer Tools Build: v22.0.5-757759 下面所有的接入都是基于这个版本的eclipse做开发。-

一,银联的接入(百付天下的银联支付)


需要准备的工具:
网址:http://58.246.136.10:8921/mediawiki/index.php/%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%8E%A5%E5%85%A5v1.1

1, upomp_dev/lib/upomp_bypay_lib.jar 核心jar包  

upomp_dev/assets/upomp_bypay_config.xml配置文件  

upomp_dev/res/* 资源文件这里的资源文件一定要全部导入到layout文件夹下,否则会资源缺失


2,导入相关的资源文件 

1.把upomp_bypay_1_1_lib.jar 包复制到lib文件夹下,然 后通过build path导入工程。 

2.添加Activity声明到AndroidManifest.xml文件。在 AndroidManifest.xml文件中,添加银联手机在线支付所用 的Activity的声明,并且添加相关权限,所要添加的Activity列表请按照SDK目录下提供的AndroidManifest.xml 样例。 

这样就完成了相关资源的导入工作

3,取得服务器生成的订单报文,调用sdk 服务器生成的报文样例如下:

  <?xml version="1.0" encoding="UTF-8" ?> 
    <upomp application="LanchPay.Req" version="1.1.0">
    <merchantId>303310048990001</merchantId> //商户ID
    <merchantOrderId>20120216175424121305</merchantOrderId> //订单编号
    <merchantOrderTime>20120216175424</merchantOrderTime> //订单时间
<sign>WQAU/lv3k1M4s6dBv0ge3CgzfXRgWhKn+wlED1PYJQuC8sOJEC0tbPB54E4jFpHmkTryuogAxV5oqo1FEzHsRcW WIusfxhDW/UvHsxGIPp2bNIfW5kxFEPKkt/IfY9IoLOk9IvzoUOInPnwjBx9uA85wFWf2aR5h/csEQV9XHHQ=</sign> 
   </upomp>

一般情况下 我们自己来拼接报文信息,以笔者为例:

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>

<upompapplication=\"LanchPay.Req\" version=\"1.1.0\">"
+ "<merchantId>"
+ pay.getMerchantId()
+ "</merchantId>"
+ "<merchantOrderId>"
+ pay.getMerchantOrderId()
+ "</merchantOrderId>"
+ "<merchantOrderTime>"
+ pay.getMerchantOrderTime()
+ "</merchantOrderTime>"
+ "<sign>"
+ pay.getSign()
+ "</sign>"
+ "</upomp>";

4,使用报文,调用银联的SDK,支付

 调起方式intent startActivityForResult()方式
    示例
    Intent intent = new Intent(当前activity.this,SplashActivity.class);
    Bundle mBundle = new Bundle();
    mBundle.putString("xml", str);str为服务器返回的支付报文
    intent.putExtras(mBundle);
    startActivityForResult(intent, 1);
//这里使用的是activity的回调方法 将支付结果回调告诉我们

  5,完成支付,取得回调结果

     接受插件返回结果onActivityResult()
示例
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 
// TODO Auto-generated method stub
 
super.onActivityResult(requestCode, resultCode, data);
 
if(requestCode == 20){
   
//收到支付插件结果,进行逻辑处理
 
  Bundle mBundle = data.getExtras();
 
 String result = mBundle.getString("xml");result是插件返回的报文
 
}
}


总结:

银联支付相对与支付宝,微信而言,它使用很方便,方便在于只要有一张银联的卡,就可以支付,无需绑定第 三 方支付,但是接入时候也比较麻烦,它的SDK集成程度不高,还要导入资源文件,这对开发者来说,是非常打的缺 陷,而 支付宝,微信就解决了这个问题。使用就SDK接入方便,就简单了许多。


二,支付宝接入

1,开发包的导入

快捷支付SDK以插件的形式集成在商户应用的客户端工程里,主要包括三部分:
1,核心插件jar包alipay.jar 支付核心jar
2,资源Library工程alipay_lib 支付的资源工程
3,移动支付apk包alipay_msp.apk(可选) 用户如果没有安装alipay 则通过此安装包安装支付宝


2,导入开发资源
1,解压alipay_lib.zip,将解压出来alipay_lib拷贝到Eclipse workspace,通过Eclipse import该工程,并在此工程的Properties->Android中选中为library工程,

2,将alipay.jar复制至商户应用工程的libs目录下,通过Java Build Path导入进工程,


3,修改Manifest
1,在商户应用工程的AndroidManifest.xml文件里面添加Activity声明 和权限声明(
特么的,第一次用这个写博 客,不会上图,特么的大家原谅下,等下我会吧网址发出来,给大家下载demo做参考


4,做代码混淆

1,如果需要对代码进行混淆,请保证project.properties文件中添加了此行内容:

-keep class com.alipay.android.app.IAliPay(*;)

-keep class com.alipay.android.app.IAlixPay(*;)

-keep class com.alipay.android.app.IRemoteServiceCallback{*;)


5,生成订单信息,调用SDK

在调用快捷支付SDK时,需要提交订单信息info,其中参数以key=”value”形式呈现,参数之间以“&”分割 所有参数不可缺。

// 创建支付宝订单信息
private String getNewOrderInfo(Pay pay) {
StringBuilder sb = new StringBuilder();
sb.append("partner=\"");
sb.append(Keys.DEFAULT_PARTNER);
sb.append("\"&out_trade_no=\"");
sb.append(pay.getOut_trade_no());
// 产品信息
sb.append("\"&subject=\"");
sb.append(pay.getSubject());
sb.append("\"&body=\"");
sb.append(pay.getBody());
sb.append("\"&total_fee=\"");// 价格
sb.append(pay.getTotal_fee());
sb.append("\"&notify_url=\"");
// 网址需要做URL编码
sb.append(URLEncoder.encode(pay.getNotify_url()));// 异步返回地址 服务器地址
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);
}

然后对订单信息进行处理 然后调用支付宝UI

String sign = Rsa.sign(info, Keys.PRIVATE);
sign = URLEncoder.encode(sign);
info += "&sign=\"" + sign + "\"&"
+ getSignType();
// start the pay.
final String orderInfo = info;
Log.i(TAG, "orderInfo = " + orderInfo);
// 调用支付宝UI
new Thread() {
public void run() {
AliPay alipay = new AliPay(
Lbs_shop_pay.this, mHandler);
// 设置为沙箱模式,不设置默认为线上环境
// alipay.setSandBox(true);
String result = alipay.pay(orderInfo);
Log.i(TAG, "result = " + result);
Message msg = new Message();
msg.what = RQF_PAY;
msg.obj = result;
mHandler.sendMessage(msg);
}}.start();

总结:

支付包支付使用了handler处理了异步任务,使用起来更加方便,而且不用导入layout文件 这比银联是个非常大

的进步,而且提供了用户为安装支付宝的时候,提供了安装包,第一,为用户节约了时间和流量,从开发的角度来说更注重用户的体验感


PS:以上类容纯属本屌手打 累死锅了 而且第一次发表,不熟悉工具,先就这样吧,转载请注明出处。技术交流请 加: 162992708


                             

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值