首页 > 编程语言 >php接入eGhl支付

php接入eGhl支付

时间:2024-06-03 16:22:44浏览次数:28  
标签:return 接入 requestData setting eGhl hash php data order

 

参数

 1  # 订单信息
 2   $order = $order->toArray();
 3   $products    = "商品信息";
 4   $PaymentID = substr(md5(time()), 0,19);
 5   $PageTimeout = 780;
 6   $url = env('APP_URL', '');
 7   # 支付成功链接 post
 8   $MerchantApprovalURL = sprintf('%s/eGhl/success?order_number=%s',$url, $order['number']);
 9   # 取消支付或者支付失败链接 get
10   $MerchantReturnURL = sprintf('%s/orders/%s/pay', $url, $order['number']);
11   # 回调post
12   $MerchantCallbackURL = sprintf('%s/eGhl/callback', $url);
13 
14   // todo beikshop货币编号问题,beikshop是MRY实际e-ghl支持的编码是MYR
15   if ($order['currency_code'] == 'MRY') {
16       $order['currency_code'] = 'MYR';
17   }
18   // 订单金额,eghl支持两位小数
19   $order['total'] = sprintf("%.2f", $order['total']);
20   // HashValue 值生成
21   $stringParam = $payment_setting['merchant_password'] . $payment_setting['merchant_id'] . $PaymentID . $MerchantReturnURL .
22   $MerchantApprovalURL .$MerchantCallbackURL . $order['total'] . $order['currency_code'] . $order['ip'] . $PageTimeout;
23   $hash = hash('sha256',$stringParam);

 

Sample HTML Form Post Payment Request

 1 <form name="frmPayment" method="post" action="{{ $payment_setting['api_url'] }}">
 2   <input type="hidden" name="TransactionType" value="SALE">
 3   <input type="hidden" name="PymtMethod" value="ANY">
 4   <input type="hidden" name="ServiceID" value="{{ $payment_setting['merchant_id'] }}">
 5   <input type="hidden" name="PaymentID" value="{{ $PaymentID }}">
 6   <input type="hidden" name="OrderNumber" value="{{ $order['number'] }}">
 7   <input type="hidden" name="PaymentDesc" value="{{ $PaymentDesc }}">
 8   <input type="hidden" name="MerchantReturnURL" value="{{ $MerchantReturnURL }}">
 9   <input type="hidden" name="MerchantApprovalURL" value="{{ $MerchantApprovalURL }}">
10   <input type="hidden" name="MerchantCallbackURL" value="{{ $MerchantCallbackURL }}">
11   <input type="hidden" name="Amount" value="{{ $order['total'] }}">
12   <input type="hidden" name="CurrencyCode" value="{{ $order['currency_code'] }}">
13   <input type="hidden" name="CustIP" value="{{ $order['ip'] }}">
14   <input type="hidden" name="HashValue" value="{{ $hash }}">
15   <input type="hidden" name="LanguageCode" value="{{ $order['locale'] }}">
16   <input type="hidden" name="CustName" value="{{ $order['payment_customer_name'] }}">
17   <input type="hidden" name="CustEmail" value="{{ $order['email'] }}">
18   <input type="hidden" name="CustPhone" value="{{ $order['shipping_telephone'] }}">
19   <input type="hidden" name="PageTimeout" value="{{ $PageTimeout }}">
20   <input class="btn btn-primary btn-lg" type="submit" name="submit" value="{{
21         __('EGhl::common.btn_submit') }}">
22 </form>

 异步回调处理

 1     public function callback (Request $request)
 2     {
 3         try {
 4             $requestData = $request->all();
 5             Log::info( 'Request data: ' . json_encode( $requestData ) );
 6 
 7             $txnStatus   = $requestData['TxnStatus'];
 8             $orderNumber = $requestData['OrderNumber'] ?? '';
 9             $order       = OrderRepo::getOrderByNumber( $orderNumber );
10             $setting     = plugin_setting( $order['payment_method_code'] );
11 
12             Log::info( 'Request TxnStatus: ' . $txnStatus );
13             Log::info( 'Request number: ' . $orderNumber );
14             if ( $txnStatus == 0 && $this->checkHashValue( $setting, $requestData ) ) {
15                 StateMachineService::getInstance( $order )->setShipment()->changeStatus( StateMachineService::PAID );
16                 return json_encode( $requestData );
17             }
18             return "fail";
19 
20         } catch ( \Exception $e ) {
21             Log::info( 'eGhl error: ' . $e->getMessage() );
22             return "fail";
23         }
24     }
25 
26 /**
27      * 验证回调参数的合法性
28      *
29      * @param array $setting 配置信息
30      * @param array $data    回调数据
31      * @return bool
32      */
33     private function checkHashValue (array $setting, array $data) : bool
34     {
35         $string = $setting['merchant_password'] .
36             $data["TxnID"] .
37             $setting['merchant_id'] .
38             $data["PaymentID"] .
39             $data["TxnStatus"] .
40             $data["Amount"] .
41             $data["CurrencyCode"] .
42             $data["AuthCode"];
43 
44         $hash = ( hash( 'sha256', $string ) );
45         if ( $hash === $data["HashValue"] ) {
46             return true;
47         }
48 
49         return false;
50     }

 同步回调处理

同步回调这边和异步返回的参数一致,根据自己的业务逻辑做处理,这边不贴代码了。

 

标签:return,接入,requestData,setting,eGhl,hash,php,data,order
From: https://www.cnblogs.com/chenjiangbin/p/18229103

相关文章

  • 解决php因为输出内容太短无法流式(Stream)输出问题
    实测得知,如果用PHP做流式输出每次echo的内容太短的话,就没有流式的效果了,而是会等输出的长度达到一定时前端才能拿到结果,如下:  这是我这边的测试结果,可见,这里仅接收到了两次流式输出,但是我在PHP里是输出了10次,从而证明了每次流式的内容达到一定长度时才能有流式得到效果,这个......
  • AS-V1000视频监控接入平台:通过SDK接入宇视NVR及对应的网路摄像机(通道)
    目录一、AS-V1000视频监控平台介绍1、概述2、视频接入能力介绍3、功能介绍二、使用宇视的SDK接入宇视NVR1、添加宇视SDK设备类型(类型:宇视NVR)2、NVR的SDK设置​3、管理平台接入(1)添加设备入口(2)添加设备信息(3)添加NVR设备成功(4)设备能力4、添加通道三、接入后的用户和......
  • PHP利用前端跨域请求限制实现域名授权
    前言晓杰最近在开发一个活码引流系统,功能基本已经开发完成,正在研究授权方面的问题,下面是晓杰研究出来的结果,分享给大家,不喜勿喷!研究过程由于前后端分离架构,前端使用了Vue2.6后端使用了ThinkPHP6,刚开始开发的时候就遇到了跨域请求失败的问题。后续将后台增加了$hea......
  • 企业微信接入系列-上传临时素材
    企业微信接入系列-上传临时素材文档介绍上传临时素材写在最后文档介绍创建企业群发的文档地址:https://developer.work.weixin.qq.com/document/path/92135,在创建企业群发消息或者群发群消息接口中涉及到上传临时素材的操作,具体文档地址:https://developer.work.weixin......
  • PHP历理 做一个计算24点的功能重构版
    注意:同样存在少数计算不出24的现象,不过已经接近完善了<?phpset_time_limit(0);$values=array(2,4,10,10);$result=24;$list=array();echo"<pre>";@makeValue($values);print_r($list);functionmakeValue($values,$set=array()){$words=array(&......
  • PHP历理 做一个计算24点的功能完善版
    <?php/*demo*/$tf=newTwentyFourCal();$tf->calculate(array(5,5,5,5));$tf->calculate(array(2,4,10,10));$tf->calculate(array(4,4,10,10));$tf->calculate(array(1,2,7,7));$tf->calculate(array(4,4,4,4));$tf->calculate(......
  • PHP历理 做一个计算24点的功能
    注意:有些计算24点的数字无法计算出来。不建议使用。<?phpfunctioncalculate24($nums){$operators=['+','-','*','/'];$combinations=[];foreach($numsas$num1){foreach($numsas$num2){if($n......
  • PHP执行sql
    PHP连接MySQL连接数据库<?php$severname='localhost';$username='root';$password='123456';$dbanme='数据库名'//创建连接$conn=newmysqli($servername,$username,$password,$dbname);//连接检测if($conn->connect_error){......
  • PHP执行sql
    PHP连接MySQL连接数据库<?php$severname='localhost';$username='root';$password='123456';$dbanme='数据库名'//创建连接$conn=newmysqli($servername,$username,$password,$dbname);//连接检测if($conn->connect_error){......
  • 一个免费远程接入内网工具
    无需公网ip,远程接入内网在家里连上公司局域网在公司里回到家里局域网外出途中,随时随地,“回到”公司或家中简单、便捷配置简单;秒连;支持全终端;驱动级的轻量化安全、可靠双向TLS;全局AES-256;驱动级稳定性它就是KanxueSecurityAccess(看雪安全接入)KSA的服务端和客户端......