jjzjj

php - 主卡 migs md5 到 SHA-256 HMAC php

coder 2024-04-07 原文

我有一个来自 migs 的网关,但它们已将 md5 更改为 SHA-256 HMAC 我如何在我的代码中更改它我尝试了太多次但我收到错误 400 我认为我的代码存在一些问题

现有代码

<?php
$db1 = new ps_DB();
$q = "SELECT country_2_code FROM #__vm_country WHERE     country_3_code='".$user->country."' ORDER BY country_2_code ASC";
$db1->query($q);


$url = "https://migs.mastercard.com.au/vpcpay";

$SECURE_SECRET = MIGS_SS;
$vpcURL = $url . "?";
$md5HashData = $SECURE_SECRET;

$tax_total = $db->f("order_tax") + $db->f("order_shipping_tax");
$discount_total = $db->f("coupon_discount") + $db->f("order_discount");

 if( MIGS_TEST == 1)
  $amt123 = MIGS_TESTMODEAMT*100;
 else
  $amt123 =   round(($db->f("order_total")+$tax_total-$discount_total)*100,2);

    $post_variables = Array(
   "vpc_Version" => "1",
    "vpc_Command" => "pay",
    "vpc_AccessCode" => MIGS_ACCESSCODE,
    "vpc_MerchTxnRef" => $db->f("order_id").'_'.$db->f("order_number"),
    "vpc_Merchant" => MIGS_MID,
    "vpc_OrderInfo" =>  $VM_LANG->_('PHPSHOP_ORDER_PRINT_PO_NUMBER')."_".   $db->f("order_id"),
   "vpc_Amount" => $amt123, 
   "vpc_Locale" => 'en',
   "vpc_ReturnURL" => SECUREURL ."index.php?option=com_virtuemart&  page=checkout.migs&order_id=".$db->f("order_id")

    );
    ksort ($post_variables);

    if( $page == "checkout.thankyou" ) {
    $query_string = "?";
    foreach( $post_variables as $name => $value ) {
    $query_string .= urlencode($name). "=" . urlencode($value) ."&";
    //$vpcURL .= urlencode($name). "=" . urlencode($value) ."&";
    $md5HashData .= $value;
     }

    if (strlen($SECURE_SECRET) > 0) {
    $query_string .=  "vpc_SecureHash=" . strtoupper(md5($md5HashData));
    //$vpcURL .= "vpc_SecureHash=" . strtoupper(md5($md5HashData));
    }

    //die(  $url.' pppppppp '.$query_string);

   vmRedirect( $url . $query_string );
   } else {
   echo '<form action="'.$url.'" method="post" target="_blank">';
  echo '<input type="image" name="submit" src="https://www.paypal.com/en_US  /i/btn/x-click-but6.gif" alt="Click to pay with PayPal - it is fast, free and secure!" />';

    foreach( $post_variables as $name => $value ) {
   echo '<input type="hidden" name="'.$name.'"    value="'.htmlspecialchars($value).'" />';
    }
   echo '</form>';

    }
  ?>

我从 migs 得到的新代码

    foreach($_POST as $key => $value) {
     // create the hash input and URL leaving out any fields that have no  value
    if (strlen($value) > 0) {
    ?>
         <input type="hidden" name="<?php echo($key); ?>"  value="<?php    echo($value); ?>"/><br>
  <?php             
 if ((strlen($value) > 0) && ((substr($key, 0,4)=="vpc_") ||       (substr($key,0,5) =="user_"))) {
     $hashinput .= $key . "=" . $value . "&";
    }
    }

   }
   $hashinput = rtrim($hashinput, "&");
    ?>      
         <!-- attach SecureHash -->
                        <input type="hidden" name="vpc_SecureHash"  value="<?php echo(strtoupper(hash_hmac('SHA256',
  $hashinput, pack('H*',$securesecret)))); ?>"/>
    <input type="hidden" name="vpc_SecureHashType" value="SHA256">

我如何在我的代码中使用它?基于 md5 的代码运行良好,但是当我将其转换为 sha 时,到达网关后出现 400 错误,由于安全问题,我已经删除了 migs 密码

最佳答案

请尝试 https://github.com/kareem3d/merchant-sample-code

我在这个示例代码中只有一个问题, 在 https://github.com/kareem3d/merchant-sample-code/blob/master/functions.php ,您需要删除 urlencode。

行:$secureHash .= $key."=".$value."&";

关于php - 主卡 migs md5 到 SHA-256 HMAC php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40348312/

有关php - 主卡 migs md5 到 SHA-256 HMAC php的更多相关文章

  1. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  2. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  3. Ruby - 不支持的密码算法 (AES-256-GCM) - 2

    我收到错误:unsupportedcipheralgorithm(AES-256-GCM)(RuntimeError)但我似乎具备所有要求:ruby版本:$ruby--versionruby2.1.2p95OpenSSL会列出gcm:$opensslenc-help2>&1|grepgcm-aes-128-ecb-aes-128-gcm-aes-128-ofb-aes-192-ecb-aes-192-gcm-aes-192-ofb-aes-256-ecb-aes-256-gcm-aes-256-ofbRuby解释器:$irb2.1.2:001>require'openssl';puts

  4. ruby - 256 种颜色,前景和背景 - 2

    这是两个脚本的故事,与previousquestion有关.这两个脚本位于http://gist.github.com/50692.ansi.rb脚本在所有256种背景颜色上显示所有256种颜色。ncurses.rb脚本显示所有256种前景颜色,但背景显示基本的16种颜色,然后似乎循环显示各种属性,如闪烁和反向视频。那么是什么给了?这是ncurses中的错误,它使用带符号的整数来表示颜色对吗?(即'tputcolors'表示256但'tputpairs'表示32767而不是65536)似乎如果是这种情况,颜色对的前半部分会正确显示但后半部分会重复或进入属性作为int包裹。

  5. ruby-on-rails - Rails 还是 Sinatra? PHP程序员入门学习哪个好? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?

  6. ruby - 使用 ruby​​ 生成格式化为/etc/shadow 的 SHA512 crypt-style 哈希? - 2

    我想生成SHA512散列密码以直接包含在/etc/shadow文件中以与chef'suserresource一起使用.通常我会为此访问stdlib的Digest库,但它不会以正确的格式生成哈希:ruby-1.9.2-p136:001>require'digest/sha2'=>trueruby-1.9.2-p136:002>Digest::SHA512.hexdigest('test')=>"ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b1437

  7. ruby-on-rails - PHP 魔术方法 __call、__get 和 __set 的 Ruby 等价物 - 2

    我很确定Ruby有这些(等同于__call、__get和__set),否则find_by将如何在Rails中工作?也许有人可以举一个简单的例子来说明如何定义与find_by相同的方法?谢谢 最佳答案 简而言之你可以映射__调用带有参数的method_missing调用__设置为方法名称以'='结尾的method_missing调用__获取不带任何参数的method_missing调用__调用PHPclassMethodTest{publicfunction__call($name,$arguments){echo"Callingob

  8. ruby - Lisp - 是否适合网络编程/应用程序(交互式)? ruby 的方式是? php的方式是? - 2

    Lisp是否适合Web编程/应用程序(交互式),就像ruby​​和php一样?需要考虑的事情是:易于使用可部署性难度(尤其是对于编程初学者而言)(编辑)在阅读PaulGraham'sessay之后,我特别提到了CommonLisp.将是我的第一门编程语言。在这方面。这样做合适吗?我听说Clojure的宏功能不如CommonLisp的强大,这就是我尝试学习Clojure的原因。它教授编程并且非常强大。 最佳答案 Lisp是一个语系,而不是单一的语言。为了稍微回答您的问题,是的,存在用于各种Lisp方言的Web框架,例如用于Common

  9. 软件工程毕业设计课题(81)微信小程序毕业设计PHP校园跑腿小程序系统设计与实现 - 2

        项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信校园跑腿小程序系统,前台用户使用小程序发布跑腿任何和接跑腿任务,后台管理使用基于PHP+MySql的B/S架构;通过后台管理跑腿的用户、查看跑腿信息和对应订单。意义:手机网络时代,大学生通过手机网购日常用品、外卖外卖、代取快递等已不再是稀奇的事情。此外,不少高校还流行着校园有偿工作,校园跑腿就成了大学生创业服务项目。        因为你在校园里,所以不会有进入的限制。并不是所有的外卖平台都可以随意进入校园,比如小黄和小蓝的双打外卖平台。许多大学禁止送餐进入学校,更不用说送餐进入宿舍了。这一措施使得校园服务市场的竞争相对不

  10. K8s部署PHP项目 - 2

    前言    前端时间PHP项目部署升级需要,需要把Laravel开发的项目部署K8s上,下面以laravel项目为例,讲解采用yaml文件方式部署项目。一、部署步骤1.创建Dockerfile文件Dockerfile是一个用来构建镜像的文本文件,在容器运行时,需要把项目文件和项目运行所必须的组件安装其中。#基础镜像FROMphp:7.4-fpm#时区ARGTZ=Asia/Shanghai#更换容器时区RUNcp"/usr/share/zoneinfo/$TZ"/etc/localtime&&echo"$TZ">/etc/timezone#替换成阿里apt-get源RUNsed-i"s@http

随机推荐