android移动支付——银联支付(1),面试总结+解答分享

(5)客户端通过交易流水号(TN)调用支付控件;

(6)用户在支付控件中输入相关支付信息后,由支付控件向银联后台发起支付请求;

(7)支付成功后,银联后台将支付结果通知给商户后台;

(8)银联将支付结果通知支付控件;

(9)支付控件显示支付结果并将支付结果返回给客户端;

注: 本文档主要关注上述流程中(5)、(9)部分的实现

目前各个平台支持的设备情况如下:

Android平台SDK主要适用于Android 2.3及以上版本的终端设备;

3.测试账号

提供测试使用卡号、手机号信息(此类信息仅供测试,不会发生正式交易)

招商银行借记卡:6226090000000048

手机号:18100000000

密码:111101

短信验证码:123456(先点获取验证码之后再输入)

证件类型:01身份证

证件号:510265790128303

姓名:张三

华夏银行贷记卡:6226388000000095

手机号:18100000000

cvn2:248

有效期:1219

短信验证码:123456(先点获取验证码之后再输入)

证件类型:01身份证

证件号:510265790128303

姓名:张三

4.接入SDK和一些文档的说明

技术支持和业务说明的一些东西

手机控件支付SDK下载demo还有相关的接入文档之类的jar包

因为下载下来的银联手机控件支付开发包里面的demo工程都还没配好的,还有是用eclipse的,一些说明也在下载回来的控件使用指南的文档中有了,这里也会列出来,现在我改用Androidstudio来完成这个demo,如下:

4.1 SDK包说明

商户开发者在获取到银联提供的开发包后请检查SDK文件所在目录upmp_android/sdkProSDK,以下部分提及的文件均在该目录中:

apk目录下包括了支付控件的apk:UPPayPluginExPro.apk

jar目录下包括了商户集成所需要的jar包、so文件(支持arm,armv7,x86,x86_64和arm64-v8a平台)和资源文件。

UPPayAssistEx.jar定义了调用支付控件所需要的接口。

4.2接口说明

1、 支付接口

upmp_android/UPPayAssistEx.jar中定义了启动支付控件的接口,接口定义如下:

public static int startPay(Activity activity, String spId, String sysProvider, String orderInfo, String mode)

参数说明:

activity —— 用于启动支付控件的活动对象

spId —— 保留使用,这里输入null

sysProvider —— 保留使用,这里输入null

orderInfo —— 订单信息为交易流水号,即TN,为商户后台从银联后台获取。

mode —— 银联后台环境标识,“00”将在银联正式环境发起交易,“01”将在银联测试环境发起交易

返回值:

UPPayAssistEx.PLUGIN_VALID —— 该终端已经安装控件,并启动控件

UPPayAssistEx.PLUGIN_NOT_FOUND — 手机终端尚未安装支付控件,需要先安装支付控件

2、检查是否安装银联Apk的接口

upmp_android/UPPayAssistEx.jar中定义了检测银联apk是否安装的接口,接口定义如下:

public static boolean checkInstalled (Context context)

参数说明:

activity —— 用于启动支付控件的context环境

返回值:

true —— 该终端已经安装控件apk

false — 该终端未安装控件apk

4.3       添加SDK包

(1)可以自己新建一个工程来写demo,也可以利用Androidstudio导入eclipse的demo

生成Androidstudio的工程

(2)在appàsrcàmain新建一个assets文件夹,拷贝upmp_android/sdkPro/jar/data.bin到工程的assets/目录下;

(3)在main目录下新建一个jniLibs,然后再拷贝upmp_android/sdkPro/jar/xxx/libentryexpro.so和upmp_android/sdkPro/jar/xxx/libuptsmaddon.so到工程的libs/xxx/目录下,其中xxx为 armeabi-v7a、armeabi、arm64-v8a、x86、x86_64之一。

arm64-v8a(x86_64)是针对arm64(x86 64)架构优化的库文件,引入工程后在arm64(x86 64)机型上性能会提升,但是最终生成的程序包将变大。注意: 如果工程中使用了其他的.so库,那么需要所有.so库都有arm64-v8a(x86_64)的版本。

(4)app目录下新建libs,拷贝upmp_android/sdkPro/UPPayAssistEx.jar到工程的libs/目录下;

拷贝upmp_android/sdkPro/jar/UPPayPluginExPro.jar到工程的libs/目录下,然后进行依赖jar包;

效果如下图:

(5)在工程的AndroidManifest.xml文件中注册支付插件使用的Activity。添加如下

<uses-libraryandroid:name=“org.simalliance.openmobileapi” android:required=“false”/>

<activity

android:name=“com.unionpay.uppayplugin.demo.JARActivity”

android:label=“@string/jar” >

<activity

android:name=“com.unionpay.uppay.PayActivity”

android:configChanges=“orientation|keyboardHidden|keyboard”

android:screenOrientation=“portrait”>

<activity

android:name=“com.unionpay.UPPayWapActivity”

android:configChanges=“orientation|keyboardHidden|fontScale”

android:screenOrientation=“portrait”

android:windowSoftInputMode=“adjustResize” >

同时添加权限:

<uses-permissionandroid:name=“android.permission.INTERNET” />

注意:版本编译时的target应选用OpenMobile API,建议level19以上

(6)调用支付控件

1、支付接口调用

a)                 在调用支付控件的代码文件中引入UPPayAssistEx类如:

import com.unionpay.UPPayAssistEx;

b)     接着可以通过以下方式调用支付控件:

// “00” – 银联正式环境

// “01” – 银联测试环境,该环境中不发生真实交易

String serverMode = “01”;

UPPayAssistEx.startPay (activity, null,null, tn, serverMode);

支付完成后,获取支付控件支付结果,并添加相应处理逻辑,只需实现调用Activity中的onActivityResult()方法即可,支付成功时会返回商户客户端支付结果的签名信息。

对于新增的签名信息需注意以下几点:

1. 前台返回的支付结果中包含银联签名,要在商户后台对签名进行校验后才能展示结果。

2. 前台签名使用的密钥和算法与后台结果中的签名一致。

3. 如果商户APP在客户端内进行签名验证,要自行实现签名密钥更新的机制,否则更换密钥后会导致验签失败。(不推荐)

4. 商户订单是否成功支付应该以商户后台收到全渠道返回的支付结果为准,此处支付控件返回的结果仅作为参考。

示例代码如下:

protected void onActivityResult( int requestCode,

int resultCode,

Intent data)

{

if( data ==null ){

return;

}

String str =  data.getExtras().getString(“pay_result”);

if( str.equalsIgnoreCase(R_SUCCESS) ){

// 支付成功后,extra中如果存在result_data,取出校验

// result_data结构见c)result_data参数说明

if(data.hasExtra(“result_data”)) {

String sign =  data.getExtras().getString(“result_data”);

// 验签证书同后台验签证书

// 此处的verify,商户需送去商户后台做验签

if(verify(sign)) {

//验证通过后,显示支付结果

showResultDialog(" 支付成功! ");

} else {

// 验证不通过后的处理

// 建议通过商户后台查询支付结果

}

} else {

// 未收到签名信息

// 建议通过商户后台查询支付结果

}

}else if( str.equalsIgnoreCase(R_FAIL) ){

showResultDialog(" 支付失败! ");

}else if( str.equalsIgnoreCase(R_CANCEL) ){

showResultDialog(" 你已取消了本次订单的支付! ");

}

}

c)      result_data参数说明:

参数说明:

sign —— 签名后做Base64的数据

data —— 用于签名的原始数据

data中原始数据结构:

pay_result —— 支付结果success,fail,cancel

tn          —— 订单号

result_data示例如下:

“{“sign”:“ZnZY4nqFGu/ugcXNIhniJh6UDVriWANlHtIDRzV9w120E6tUgpL9Z7jIFzWrSV73hmrkk8BZMXMc/9b8u3Ex1ugnZn0OZtWfMZk2I979dxp2MmOB+1N+Zxf8iHr7KNhf9xb+VZdEydn3Wc/xX/B4jncg0AwDJO/0pezhSZqdhSivTEoxq7KQTq2KaHJmNotPzBatWI5Ta7Ka2l/fKUv8zr6DGu3/5UaPqHhnUq1IwgxEWOYxGWQgtyTMo/tDIRx0OlXOm4iOEcnA9DWGT5hXTT3nONkRFuOSyqS5Rzc26gQE6boD+wkdUZTy55ns8cDCdaPajMrnuEByZCs70yvSgA==”,“data”:“pay_result=success&tn=201512151321481233778”}”

2、检测是否已安装银联Apk接口调用

if(UPPayAssistEx.checkInstalled(context))

{

//当判断用户手机上已安装银联Apk,商户客户端可以做相应个性化处理

}

(7)老版SDK商户修改说明

对于原有sdk接入商户,可在原有修改的基础上更新对应文件后,还需增加如下修改:

1.     增加upmp_android/sdkPro/jar/xxx/libuptsmaddon.so

2.    在工程的AndroidManifest.xml文件增加UPPayWapActivity。添加如下:

<activity

android:name=“com.unionpay.UPPayWapActivity”

android:configChanges=“orientation|keyboardHidden”

android:screenOrientation=“portrait”

android:windowSoftInputMode=“adjustResize”/>

3.    调用接口改为4.2节中支付接口startPay,但原有的startPayByJAR接口仍保留,如下所示:

public static int startPayByJAR (Activity activity, Class<?> payCls, String spId, String sysProvider, String orderInfo, String mode)

参数说明:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

总结

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的Android开发中高级必知必会核心笔记,共计2968页PDF、58w字,囊括Android开发648个知识点,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。

虽然面试失败了,但我也不会放弃入职字节跳动的决心的!建议大家面试之前都要有充分的准备,顺顺利利的拿到自己心仪的offer。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

!!(备注:Android)**

总结

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的Android开发中高级必知必会核心笔记,共计2968页PDF、58w字,囊括Android开发648个知识点,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。

[外链图片转存中…(img-FVwK18mf-1712435503636)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。

虽然面试失败了,但我也不会放弃入职字节跳动的决心的!建议大家面试之前都要有充分的准备,顺顺利利的拿到自己心仪的offer。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值