Laravel 页面中使用ApplePay

2024-08-27 23:44
文章标签 使用 页面 laravel applepay

本文主要是介绍Laravel 页面中使用ApplePay,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目需要,要在页面中加上ApplePay 的功能,首先需要申请四个参数

MerchantIdentifier
ValidateMerchantURL
MerchantID
Transaction Key

页面的调用有两部分,一部分是检查当前环境的,一部分执行付款功能的

一,检查当前坏境,是否适合使用applepay,其实是判断当前的操作环境是不是移动端,且是苹果系统,比如,iphone ,ipad...

//因为用的是台比,所以js 是这个路径
<script src="https://xxxxxxxx/app-tw-redheart/dist/applepay.min.js"></script><div class="radio applePayBox" style="display: none">
<label >
<input type="radio" name="radioType" id="radioType" value="applepay" >
<img src="{{ asset('/img/applePay.png') }}" alt="ApplePay" style="width: 80px">
</label>
</div><script>init_applePay_btn();function init_applePay_btn(){var status = false;var validateMerchantURL = "{{ @$applepay_gateway['validateMerchantURL']}}";if (window.ApplePaySession) {var merchantIdentifier = "{{ @$applepay_gateway['merchantIdentifier']}}";var promise = ApplePaySession.canMakePaymentsWithActiveCard(merchantIdentifier);promise.then(function(canMakePayments) {if (canMakePayments) {$('.applePayBox').show();} else {$('.applePayBox').hide();}});} else {$('.applePayBox').hide();}}

如果当前环境适合使用applepay付款,就会显示applepay 的按钮

二,执行逻辑

    function init_applepay(){event.preventDefault();ApplePay.init({orderId:'{{@$transaction->invoice_id}}',validateMerchantURL: '{{ @$applepay_gateway["validateMerchantURL"]}}',paymentAuthorizedURL:'',payee: '{{ @$merchant_info->merchant_name}}',product: '{{@$transaction->invoice_id}}',currency: '{{@$transaction->currency}}',country: 'hk',amount: {{@$transaction->amount}},domain: ''}).then(function(result) {// alert(result);// document.getElementById('result').textContent = JSON.stringify(result);if(result.ccAuthReply_reasonCode == 100){window.location.href = "{{url('confirm/')}}";}if(result.ccAuthReply_reasonCode == 204){alert("Transaction rejected, please contact your bank. (Reference Number: "+result.requestID+")");window.location.href="{{url('checkout/')}}";}if(result.ccAuthReply_reasonCode == 150){alert("Transaction unsuccessful, please try again. (Reference Number: "+result.requestID+")");window.location.href="{{url('checkout/')}}";}})}

注意了,付款之后,applepay 会马上post 数据到paymentAuthorizedURL,需要返回一个指定格式的数据,applepay 才算是支付成功的,否则还是支付失败的。

三,后台处理数据

//導入
require_once(app_path('ApplePay/cybersource/sdk-php/lib/CybsNameValuePairClient.php'));//判斷是否屬於uatif($applepay_gateway['uat'] == "1"){$api_config["wsdl"] = "https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.121.wsdl";$api_config["nvp_wsdl"] = "https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_NVP_1.121.wsdl";}else{$api_config["wsdl"] = "https://ics2wsa.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.121.wsdl";$api_config["nvp_wsdl"] = "https://ics2wsa.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_NVP_1.121.wsdl";}//初始化 client$client = new \CybsNameValuePairClient(array(),$api_config);//賦值$request=['merchantID'=>$applepay_gateway['merchantid'],'ccAuthService_run'=>'true','ccCaptureService_run'=>'true','merchantReferenceCode'=>$payment_data['orderId'],'ccAuthService_reconciliationID'=>$payment_data['orderId'],'billTo_firstName'=>'','billTo_lastName'=>'','billTo_street1'=>'','billTo_city'=>'','billTo_state'=>'','billTo_postalCode'=>'','billTo_country'=>'','billTo_email'=>$payer_email,'encryptedPayment_descriptor'=>'','encryptedPayment_encoding'=>'Base64','encryptedPayment_data'=>base64_encode($payment_token),'purchaseTotals_currency'=>$currency,'purchaseTotals_grandTotalAmount'=>$amount,'paymentSolution'=>'001',];//查詢訂單$reply = $client->runTransaction($request);// 數據整理$arr_reply = explode("\n", $reply);$arr_reply_formatted = array();foreach($arr_reply as $item) {$arr_tmp = explode('=', $item);$key = $arr_tmp[0];if (!empty($key)){$value = $arr_tmp[1];$arr_reply_formatted[$key] = $value;}}//返回查詢內容,根據內容判斷訂單$arr_reply_formatted;//表示扣费成功 ,付款成功,当返回指定格式,就会扣费成功,处理结束if($arr_reply_formatted['reasonCode'] == '100' && $arr_reply_formatted['decision'] == 'ACCEPT'){}//返回指定格式的数据echo  json_encode($arr_reply_formatted);exit;

这篇关于Laravel 页面中使用ApplePay的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1113121

相关文章

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Java Stream流与使用操作指南

《JavaStream流与使用操作指南》Stream不是数据结构,而是一种高级的数据处理工具,允许你以声明式的方式处理数据集合,类似于SQL语句操作数据库,本文给大家介绍JavaStream流与使用... 目录一、什么是stream流二、创建stream流1.单列集合创建stream流2.双列集合创建str

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有