Android java 对接建行支付

  • 准备工作
    • 创建常量类
    • 编写支付工具类
    • 遇到的坑
    • 用到的工具类

准备工作

在对接建行支付之前,需要准备好这几个东西:商户代码、商户柜台代码、分行代码、公钥

创建常量类

/*** @description: 支付参数* @copyright: Copyright (c) 2020* @author: liwei* @date: 2020/5/25* @version: 1.00* @history:*/
public class PayConstant {/*** 商户代码--由建行统一分配*/public static final String MERCHANTID="MERCHANTID";public static final String MERCHANTID_VALUE="****";/*** 商户柜台代码--由建行统一分配*/public static final String POSID="POSID";public static final String POSID_VALUE="****";/*** 分行代码--由建行统一指定*/public static final String BRANCHID="BRANCHID";public static final String BRANCHID_VALUE="****";/*** 订单号--由商户提供,最长 30 位*/public static final String ORDERID="ORDERID";/*** 付款金额--由商户提供,按实际金额给出* NUMBER(16,2)*/public static final String PAYMENT ="PAYMENT";/*** 币种--缺省为 01-人民币*/public static final String CURCODE="CURCODE";public static final String CURCODE_VAUE="01";/*** 备注 1--一般作为商户自定义备注信* 息使用,可在对账单中显示。*/public static final String REMARK1="REMARK1";/*** 备注 2--一般作为商户自定义备注信* 息使用,可在对账单中显示。*/public static final String REMARK2="REMARK2";/*** 交易码--由建行统一分配为 520100*/public static final String TXCODE="TXCODE";public static final String TXCODE_VAUE="520100";/*** MAC 校验域--采用标准 MD5 算法,由商户实现*/public static final String MAC="MAC";/*** TYPE--分行业务人员在 P2 员工渠道后台设置防钓鱼的开关。1- 防钓鱼接口*/public static final String TYPE="TYPE";public static final String TYPE_VAUE="1";/*** 公钥后 30 位--商户从建行商户服务平台下载,截取后 30 位。仅作为源串参加 MD5 摘要,不作为参数传递*/public static final String PUB="PUB";public static final String PUB_VAUE= "****";public static String getPUB(){return PUB_VAUE.substring(PUB_VAUE.length()-30,PUB_VAUE.length());}/*** 网关类型--默认送 0*/public static final String GATEWAY="GATEWAY";public static final String GATEWAY_VAUE="0";/*** 客户端 IP--客户在商户系统中的 IP,即客户登陆(访问)商户系统时使用的 ip*/public static final String CLIENTIP="CLIENTIP";public static String getClientip(){return IPUtil.getIPAddress();}/*** 客户注册信息--客户在商户系统中注册的信息,中文需使用 escape 编码*/public static final String REGINFO="REGINFO";/*** 商品信息--客户购买的商品中文需使用 escape 编码*/public static final String PROINFO="PROINFO";/*** 商户 URL--商户送空值即可;具体请看 REFERER 设置说明*/public static final String REFERER="REFERER";/*** 分期期数--信用卡支付分期期数,一般为 3、6、12 等,必须为大于 1 的整数,当分期期数为空或无该字段上送时,* 则视为普通的网上支付。当分期期数为空或无该字段上送时,该字段不参与 MAC校验,否则参与 MAC 校验。*/public static final String INSTALLNUM="INSTALLNUM";/*** 客户端标识--商 户 客 户 端 的 intent-filter/schema,* 格式如下:comccbpay+ 商 户 代 码 ( 即 MERCHANTID 字段值)+商户自定义的标示 app 的字符串* 商户自定义的标示 app 的字符串,只能为字母或数字。示例:comccbpay105320148140002alipay* 当该字段有值时参与 MAC校验,否则不参与 MAC 校验。*/public static final String THIRDAPPINFO="THIRDAPPINFO";public static final String THIRDAPPINFO_VAUE="comccbpay"+"****";/*** 订单超时时间--格式:* YYYYMMDDHHMMSS如:20120214143005* 银行系统时间> TIMEOUT时拒绝交易,若送空值则不判断超时。* 当该字段有值时参与 MAC校验,否则不参与 MAC 校*/public static final String TIMEOUT="TIMEOUT";/*** 支付方式位图--10 位位图,1 为开,0 为关* 第一位:支付宝支付* 第二位:微信支付* 第三位:银联支付(保留位,* 暂不开放)* 其余位数预留。* 例如支持支付宝和微信支付* 则上送 1100000000* 该字段不参与 MAC 计算*/public static final String PAYMAP="PAYMAP";public static final String PAYMAP_VAUE="1100000000";}

上面这个常量类是我对照开发文档自己编写的,星号部分的商户号之类的需要替换成自己申请的。

编写支付工具类

/*** @description: 支付工具类* @copyright: Copyright (c) 2020 * @author: liwei* @date: 2020/5/25* @version: 1.00* @history:*/
public class PayUtils {public String getPayParams(double amount,String orderid,String ip){String params="";String mReginfo= Escape.escape("小飞侠");String mProinfo= Escape.escape("充值卡");String prepareData=PayConstant.MERCHANTID+"="+PayConstant.MERCHANTID_VALUE+"&"+PayConstant.POSID+"="+PayConstant.POSID_VALUE+"&"+PayConstant.BRANCHID+"="+PayConstant.BRANCHID_VALUE+"&"+PayConstant.ORDERID+"="+orderid+"&"+PayConstant.PAYMENT+"="+amount+"&"+PayConstant.CURCODE+"="+PayConstant.CURCODE_VAUE+"&"+PayConstant.TXCODE+"="+PayConstant.TXCODE_VAUE+"&"+PayConstant.REMARK1+"="+"&"+PayConstant.REMARK2+"="+"&"+PayConstant.TYPE+"="+PayConstant.TYPE_VAUE+"&"+PayConstant.GATEWAY+"="+PayConstant.GATEWAY_VAUE+"&"+PayConstant.PUB+"="+PayConstant.getPUB()+"&"+PayConstant.CLIENTIP+"="+ip+"&"+PayConstant.REGINFO+"="+mReginfo+"&"+PayConstant.PROINFO+"="+mProinfo;String md5ba=BaseUtils.getMd5(getMac(amount,orderid,ip,mReginfo,mProinfo));//"https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain?"+params=prepareData+"&"+PayConstant.MAC+"="+md5ba+"&"+ PayConstant.PAYMAP+"="+PayConstant.PAYMAP_VAUE;return params;}private String getMac(double amount,String orderid,String ip,String mReginfo,String mProinfo){StringBuffer tmp = new StringBuffer();tmp.append("MERCHANTID=");tmp.append(PayConstant.MERCHANTID_VALUE);tmp.append("&POSID=");tmp.append(PayConstant.POSID_VALUE);tmp.append("&BRANCHID=");tmp.append(PayConstant.BRANCHID_VALUE);tmp.append("&ORDERID=");tmp.append(orderid);tmp.append("&PAYMENT=");tmp.append(amount);tmp.append("&CURCODE=");tmp.append(PayConstant.CURCODE_VAUE);tmp.append("&TXCODE=");tmp.append(PayConstant.TXCODE_VAUE);tmp.append("&REMARK1=");tmp.append("");tmp.append("&REMARK2=");tmp.append("");tmp.append("&TYPE=");tmp.append(PayConstant.TYPE_VAUE);tmp.append("&PUB=");tmp.append(PayConstant.getPUB());tmp.append("&GATEWAY=");tmp.append(PayConstant.GATEWAY_VAUE);tmp.append("&CLIENTIP=");tmp.append(ip);tmp.append("&REGINFO=");tmp.append(mReginfo);tmp.append("&PROINFO=");tmp.append(mProinfo);tmp.append("&REFERER=");tmp.append("");return tmp.toString();}
}

在写这个测试工具类的的时候遇到比较多的坑,所以代码比较乱,封装的也不是很好,在调通之后可以自行进行重写封装。

遇到的坑

1.参与md5计算的字段不是所有的都需要,只有我在getMac方法中写到的才需要
2.参与md5计算的字段顺序很重要,不能错
3.App端字段不要拼接https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain?

用到的工具类

百度网盘链接:https://pan.baidu.com/s/113xITV5V8vHEMAojALln0Q
提取码:vs1h

Android java对接建行支付SDK相关推荐

  1. java如何实现建行支付_Android java对接建行支付SDK

    /** * @description: 支付参数 * @copyright: Copyright (c) 2020 * @author: liwei * @date: 2020/5/25 * @ver ...

  2. JAVA对接支付宝支付(超详细,一看就懂)

    Java对接支付宝支付 更多内容 冷文博客: 传送门 引入 为什么要发这篇帖子呢?原因很简单,就是因为在一个稍稍正规一点的应用上都会有支付这个环节,我们日常的在线支付如今包括支付宝,微信钱包,QQ钱包 ...

  3. java对接支付宝支付

    java对接支付宝支付演示 现在有不少的项目都需要对接支付,这里主要是进行讲解对接支付宝H5支付 废话不多说 上代码 引入支付宝官方的sdk <!-- https://mvnrepository ...

  4. java对接PayPal支付-自动续费功能

    一. java对接PayPal支付(v2). 讲了PayPal v2:checkout-sdk 的对接过程 二. java对接PayPal支付 (添加物流跟踪信息). 讲了PayPal添加物流信息 的 ...

  5. Java对接第三方支付渠道之支付宝支付

    提示:支付宝相对于微信支付更人性化,且细节做得更好. Java对接第三方支付渠道之支付宝支付 一.前期准备工作 二.导入依赖 三.书写配置类 四.书写配置文件 五.调用相关支付接口 1.流程图 2.创 ...

  6. java对接PayPal支付(v2)

    java对接PayPal支付 我们公司最近开通了网上支付功能,国内选择对接支付宝和微信,国外选择对接paypal, 今天我先将paypal对接方式记录下来,后面会记录微信和支付宝(本人比较懒,微信和支 ...

  7. java对接微信支付收不到支付通知问题(亲身实践)

    问题描述: 用java对接微信支付时,统一下单接口正常.但是用户扫码付款成功后,设置用于回调的notify_url对应的接口并没有收到请求(这个url测试过,是正常的且外网能访问的). 由于官方文档没 ...

  8. java对接大华SDK摄像头监控

    java对接大华SDK摄像头监控 SDK对接 java对接大华SDK摄像头监控 前言 获取SDK 配置环境变量 拉取实时监控数据 补充 前言 小编在接到对接大华摄像头实时监控在网页显示直播视频,先是在 ...

  9. Java对接微信支付(完整全流程)

    Java对接微信支付及支付回调通知的全流程 一.所用框架.对接微信支付我们技术组用的是payment框架,因为该框架已整合springboot因此很方便快捷 <dependency>< ...

最新文章

  1. 城市生态的机器人革命
  2. 转载-让PIP源使用国内镜像,提升下载速度和安装成功率
  3. 远程管理MAC OS
  4. adb 的原理以及它总重启等问题详解
  5. matlab常用函数辨析
  6. 经常被问到的十个 Java 面试题?你Get了吗?
  7. Oops快速定位代码行方法
  8. 转载一篇写的简单易懂的lvs用法
  9. atitit.颜色查找 根据范围 图像处理 inRange
  10. Win8.1系统 Ghost 64位 专业版下载 2014年3月份
  11. SpringClould之Eureka原理详解
  12. 计算机王码简历,王码五笔字型发明人王永民回首汉字输入这30年
  13. 数独游戏技巧从入门到精通_免费教学视频数独阶梯训练让孩子从入门到精通,数学思维直线上升!...
  14. java毕业设计民航售票管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
  15. python打印日历_python 打印日历
  16. 洛谷 P1879 [USACO06NOV]玉米田Corn Fields
  17. Java Security:Java加密框架(JCA)简要说明
  18. 疫情期间对通证经济的一些思考
  19. 计算机网络背诵笔记,震惊!网络搜索、数字笔记和云盘,让你变笨!!!
  20. MySQL函数大全及用法示例

热门文章

  1. PDF怎么编辑,如何去除PDF水印
  2. ICP、Point-to-plane ICP、GICP以及VGICP方法介绍
  3. PC与三菱PLC 485BD模块 无协议通讯模式
  4. html页面中图片滚动,Html网页图片滚动代码
  5. 【纯干货】100个运营工具推荐
  6. 安装STEP7Basic/ProfessionalV15的要求
  7. 弱电安防工程中的电线电缆基本只是
  8. yjv是电缆还是电线_电缆型号YJV和KVV的本质区别?
  9. 造纸机系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  10. 《Deep Learning (Ian Goodfellow)》概率与信息论