支付验签失败_项目里实现银联支付,比你想象的更简单

本文介绍了银联支付的简易集成步骤,包括选择SDK、添加库文件、请求订单号、服务器交互及调用支付接口。解决支付验签失败问题,详细解析支付流程,帮助开发者快速实现银联支付功能。
摘要由CSDN通过智能技术生成

之前我认为银联支付可能需要和各个银行对接比较麻烦,但是实际上并不需要,官方有现成的sdk,先看一下官方给我们的银联支付流程图:

2a95e58407733b1d964c8ea6c8d56ef6.png

大家不要被这张图片搞懵逼的了,其实很简单,这里我将其分为5小步。

第一步:根据官方文档选择符合自己的sdk

官方文档:

https://open.unionpay.com/ajweb/help/file/techFile?productId=3

第二步:将相对应的.so文件copy到 自己的工程里面去。

特别注意:

.so文件要放在src/main 目录下,和Java文件并行。还有就是把用到的权限复制到自己项目中)

第三步: 和支付宝一样,APP客户端带着这些订单号向服务器后台请求订单号orderNo

第四步:服务器后台接收到购买信息之后,将信息提交给银联后台,银联接收到后台之后给服务器返回tn号

第五步:开启调用银联支付。APP客户端带着这个流水号,也就是第三步中服务器返回的tn号,调用银联SDK所提供的方法

注意:

这个订单流水号为21位纯数字号

调用方法: UPPayAssistEx.startPay(this, null, null, tn, mMode);

结果返回:

处理银联手机支付控件返回的支付结果 调用银联支付后,返回app的时候用了,看返回结果传,成功,失败,或者是什么返回。

@Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        /**          步骤3:处理银联手机支付控件返回的支付结果         */        if(data == null) {            return;        }        String msg = "";        /**         * 支付控件返回字符串 success、fail、 cancel分别代表支付成功,支付失败,支付取消         */        String str = data.getExtras().getString("pay_result");        if (str.equalsIgnoreCase("success")) {            // 如果想对结果数据验签,可使用下面这段代码,但建议不验签,直接去商户后台查询交易结果            // result结构见 result data参数说明            if(data.hasExtra("result.data")) {                String result = data.getExtras().getString("result.data");                try {                    JSONObject resultJson = new JSONObject(result);                    String sign = resultJson.getString("sign");                    String dataOrg = resultJson.getString("data");                    //此处的 verif建议送去商户后台做验签                    //如要放在手机端验,则代码必须支持更新证书                    boolean ret = verify(dataOrg,sign, mnode);                    if (ret) {                        //验签成功,显示支付结果                        msg = "支付成功!";                    } else {                        // 验签失败                        msg = "支付失败!";                    }                }catch (JSONException e) {                    log.error("json error", e);                }            }            // 结果 resultdata为成功时,去商户后台查询一下再展示成功            msg = "支付成功!";        } else if (str.equalsIgnoreCase("fail")) {            msg = "支付失败!";        } else if(str.equalsIgnoreCase("cancel")) {            msg = "用户取消支付!";        }    }

最后注意在调用:

/*****************************************************************

* mMode参数解释: "00" - 启动银联正式环境 "01" - 连接银联测试环境

*****************************************************************/

private final String mMode = "00";

注意:

tn值就是上面第三后台给的tn,给到服务器那里,这里我这边是通过后台请求下来的,关于mMode,看第一步骤,自己改一下就行了,00开发环境,01测试环境。但是要注意,这个只是个回调接口方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值