cybersource支付对接

  • 开始对接之旅
    • 商户配置
    • 下单代码
    • CybersourceUtil 加密工具类(这个是dome 里面js 提取出来的)
    • 支付页面展示

开始对接之旅

在对接过程中走了很多弯路,官方给出的看着一知半解,主要是都是英文翻译的文档,本次我来分享下Secure Acceptance自动集成的支付方式。
这里准备了一份html的官方文档和pdf的版本
pdf文档
html文档
请按照文档进行商户账号注册和支付方式设置这里不多说了上图看看

商户配置


Profile ID 和 秘钥是支付的关键

下单代码

//传参请根据自己的业务逻辑进行修改private Map<String,String> initPayGlocashInfoRefVo(PayMerchantAccountVo shroffAccountInfo, IntfPayRefVo intfPayRefVo,JsonNode jsonNode) throws Exception {Map<String,String> data = new HashMap<>(20);data.put("access_key", shroffAccountInfo.getPassword());//上面提到的秘钥data.put("profile_id", shroffAccountInfo.getPayMerchantId());//Profile ID 支付认证data.put("transaction_uuid", String.valueOf(UUID.randomUUID()));data.put("signed_date_time",  CybersourceUtil.getUTCDateTime());data.put("locale", jsonNode.get("locale").textValue());data.put("transaction_type", jsonNode.get("transaction_type").textValue());data.put("reference_number", intfPayRefVo.getPayTransactionsId());BigDecimal amount = BigDecimal.valueOf(Double.parseDouble(intfPayRefVo.getOrderAmt())/100);data.put("amount", String.valueOf(amount));data.put("currency", jsonNode.get("currency").textValue());data.put("bill_to_email", intfPayRefVo.getMemberEmail());//开关账单信息自动填写 这个是必填信息这里我不想填后台默认填写了地址boolean isBill = jsonNode.get("isBill").asBoolean();if (isBill){data.put("bill_to_address_line1","1 My Apartment");data.put("bill_to_address_city","Mountain View");data.put("bill_to_address_state", "CA");data.put("bill_to_address_country", "US");data.put("bill_to_address_postal_code","94043");}data.put("unsigned_field_names", "");data.put("signed_field_names", CybersourceUtil.buildDataToString(data));String sign = null;sign = CybersourceUtil.sign(data,shroffAccountInfo.getSign());data.put("signature", sign);log.info("cybersource transaction create data:{}",JsonUtils.writeValueAsString(data));return data;}

由后台处理的下单信息进行加密传递给前段由前段进行表单提交

<form id="payment_confirmation" action="https://testsecureacceptance.cybersource.com/oneclick/pay" method="post"/>

这个是测试支付提交 生产替换一下
https://secureacceptance.cybersource.com/oneclick/pay

CybersourceUtil 加密工具类(这个是dome 里面js 提取出来的)

public class CybersourceUtil {//这个是支付秘钥的私钥 和加密方式private static final String HMAC_SHA256 = "HmacSHA256";private static final String SECRET_KEY = "9588e91d3823423d85b9b07d790990b5e95c89fac9be4592ae45bffbc2de31bd44fd649b3e874fe7abe39c8b7465323de40d2f6521b641968cf20cad39d3232263fad416ffe945e2a36466c9b6347664c0eb9e9a055748cc9d2bb0630768a53f350dc38ea322421e8d9aedefb8374df8d849dea9cdff4ae08d3e57fc07ddfdb5";public static String sign(Map<String,String> params,String SECRET_KEY) throws InvalidKeyException, NoSuchAlgorithmException, UnsupportedEncodingException {return sign(buildDataToSign(params), SECRET_KEY);}public static String sign(String data, String secretKey) throws InvalidKeyException, NoSuchAlgorithmException, UnsupportedEncodingException {SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(), HMAC_SHA256);Mac mac = Mac.getInstance(HMAC_SHA256);mac.init(secretKeySpec);byte[] rawHmac = mac.doFinal(data.getBytes("UTF-8"));return DatatypeConverter.printBase64Binary(rawHmac).replace("\n", "");}private static String buildDataToSign(Map<String,String> params) {String[] signedFieldNames = String.valueOf(params.get("signed_field_names")).split(",");ArrayList<String> dataToSign = new ArrayList<String>();for (String signedFieldName : signedFieldNames) {dataToSign.add(signedFieldName + "=" + String.valueOf(params.get(signedFieldName)));}return commaSeparate(dataToSign);}public static String buildDataToString(Map<String,String> params) {StringBuilder stringBuilder = new StringBuilder();for (Map.Entry<String, String> key : params.entrySet()) {stringBuilder.append(key.getKey()+",");}stringBuilder.append("signed_field_names");String str = stringBuilder.toString();return str;}private static String commaSeparate(ArrayList<String> dataToSign) {StringBuilder csv = new StringBuilder();for (Iterator<String> it = dataToSign.iterator(); it.hasNext(); ) {csv.append(it.next());if (it.hasNext()) {csv.append(",");}}return csv.toString();}public static String getUTCDateTime() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");sdf.setTimeZone(TimeZone.getTimeZone("UTC"));return sdf.format(new Date());}}

支付页面展示


当然,回调地址可以定义自己的页面,也可以托管平台的页面。好了大概流程就结束了。
有的不太清楚回调是在哪里配置的 我在这里补上

https://webhook.site/#/ 方便测试回调 这里回调地址可以访问这个网址生成的虚拟站点地址 配置到商户通知URL 方便查看回调参数如下 访问地址会看到请求信息

有什么问题可以留言我会及时回复一起交流

cybersource支付对接相关推荐

  1. Cybersource支付流程设计

    Cybersource是VISA提供的全球移动支付方案,不过使用的都是信用卡,信用卡类型包括 VISA,MasterCard,AMEX,由于Cybersource已经对接了全都主要发达国家的信用支付系 ...

  2. php个人扫码支付,PHP个人发卡网源码,支持MA支付对接,扫码自动发货

    PHP个人发卡网源码,支持MA支付对接,扫码自动发货. 源码介绍 个人发卡网源码,支持码支付对接,扫码自动发货. 自适应网页,可为商品设置优惠套餐,后台管理功能丰富. 前台发卡页面有点粗糙,已开源的可 ...

  3. Braintree-国外支付对接(二)

    在前文 国外支付对接:Braintree(一)的基础上   已经拿到了相关配置信息,接下来就是码代码了,这里完成的主要功能是支付与退款. 在此之前,先说一下Briantree的支付流程: 第一步先生成 ...

  4. Android平台招商银行“一网通”支付对接采坑记

    公司最近的App中需要做支付功能,支付中需要支持微信支付.支付宝支付.一网通支付.本文主要记录在对接Android平台中的"一网通"过程中遇到的坑,如果有类似需求的朋友,可供你参考 ...

  5. 第三方银联支付接口对接_聊聊三方支付对接那点事儿(附Demo)

    每一个做过支付对接的少年上辈子都是折翼的天使.--题记 三方支付对接是一件比较有意思的事儿,今天就拿这个话题来掰扯掰扯.相信每个做过支付对接的小伙伴都有段血与火的经历,那段日子只有痛苦与煎熬,恨不得大 ...

  6. 小呆聚合支付源码开源修正版支持易支付对接各大网站,APP离线完美回调

    @全体成员v6.4.1升级到v6.4.2 1.增加两套支付模版,用户可以后台自由切换模式 2.优化默认支付模版,增加订单来源,商品名称 3.增加app在各个手机上安装指引教程 4.优化其他细节 @全体 ...

  7. 微信支付对接海关申报

    微信支付对接海关申报 1.先微信商户中心,进行海关申报配置 重点注意:请求接口前请先在以下页面提交您的海关信息,所有你需要报关的海关信息都需要提交 2.进行海关申报(本文章是没有子订单的) 注意:商户 ...

  8. 全能第三方支付对接pay-java-parent 2.12.7 发布,支付聚合

    全能第三方支付对接Java开发工具包.优雅的轻量级支付模块集成支付对接支付整合(微信,支付宝,银联,友店,富友,跨境支付paypal,payoneer(P卡派安盈)易极付)app,扫码,网页支付刷卡付 ...

  9. 电脑版支付宝支付对接网站问题彻底解决方法总结

    这几天一直在找解决电脑版网站支付宝支付问题,今天特意来好好做个总结, 首先进入支付宝开放平台:https://openhome.alipay.com/developmentAccess/develop ...

最新文章

  1. 私有链的特点简单介绍
  2. 一款精品Android手电筒应用
  3. VM VirtualBox 虚拟机linux系统 登录密码忘记 ,重置
  4. RE:SB的SDOISB记
  5. match与index——vlookup的加强版
  6. 告别2019,写给2020:干好技术,要把握好时光里的每一步
  7. [BZOJ3529][Sdoi2014]数表
  8. AI领域都在用Python即将被淘汰?网友预测未来的编程语言不会是TA
  9. [可视化-tableau]tableau的学习实践入门篇
  10. WPF XamlObjectWriterException:无法创建未知类型Grid
  11. matlab单频噪声,基于MATLAB有噪声语音信号处理
  12. clt用MeGUI处理切割音频
  13. 植物大战僵尸:代码实现无限阳光
  14. IllegalArgumentException 异常时一个不易觉察的原因
  15. JAVA AIO编程
  16. 手机连接电脑服务器未响应怎么解决办法,电脑DNS服务器未响应怎么处理呢?
  17. WEB综合案例 黑马面面 day04 用户与角色绑定功能 登录用户菜单控制和权限效验
  18. 全球计算机科学研究生排名,新|美国计算机科学研究生专业世界排名靠50强名单...
  19. EXCEL函数vlookup视频教程
  20. linux学习相对路径与绝对路径

热门文章

  1. 基于海康威视网络摄像机的Android二次开发
  2. 欢迎大家访问我的下载频道下载资源
  3. 百度AI to B这一年:2019年都做对了什么
  4. python 操作gremlin
  5. Linux时间同步的几种方式
  6. 百度百科、搜狗百科、360百科、头条百科词条如何又好又快创建?五大杀手锏助力百科词条创建
  7. 匹配移动,联通,电信手机号码正则表达式
  8. jsonobject解析json字符串
  9. 深入了解LS1028A的ENETC、TSN交换机的特性
  10. 查看oracle 分区表大小,ORACLE查询每个表占用空间大小的方法