当前位置: 首页 > news >正文

鸿蒙实现滴滴出行项目之乘客支付订单功能

目录:

    • 一、支付流程设计
    • 二、鸿蒙乘客端实现
      • 1. 支付页面UI (PaymentPage.ets)
      • 2. 支付请求封装 (PaymentService.ets)
    • 三、服务端实现 (Spring Boot)
      • 1. 支付准备接口
      • 2. 支付回调处理
    • 四、华为支付集成关键步骤
      • 1. 配置module.json5
      • 2. 调用华为IAP SDK
    • 五、支付问题总结

一、支付流程设计

在这里插入图片描述

二、鸿蒙乘客端实现

1. 支付页面UI (PaymentPage.ets)

// src/ets/pages/PaymentPage.ets
@Entry
@Component
struct PaymentPage {@State orderInfo: Order = {id: '123456',amount: 38.5,start: '北京西站',end: '中关村'}@State payMethods: string[] = ['华为支付', '微信支付', '支付宝']@State selectedMethod: string = '华为支付'// 发起支付请求async function requestPayment() {try {const result = await httpRequestPayment(this.orderInfo.id, this.selectedMethod);if (result.code === 200) {router.replaceUrl({ url: 'pages/PaymentSuccessPage' });}} catch (err) {prompt.showToast({ message: '支付失败: ' + err.message });}}build() {Column() {// 订单信息展示Text(`订单号: ${this.orderInfo.id}`).fontSize(16)Text(`金额: ¥${this.orderInfo.amount.toFixed(2)}`).fontSize(20).margin(10)// 支付方式选择RadioGroup({ initialRadio: this.selectedMethod }) {ForEach(this.payMethods, (method: string) => {Radio({ value: method }).checked(method === this.selectedMethod).onChange((isChecked: boolean) => {if (isChecked) this.selectedMethod = method;})Text(method).margin({ left: 10 })})}.margin(20)// 支付按钮Button('立即支付').onClick(() => this.requestPayment()).width('90%').height(50).margin(20)}}
}

2. 支付请求封装 (PaymentService.ets)

// src/ets/services/PaymentService.ets
import http from '@ohos.net.http';
import { HuaweiIap } from '@ohos/huaweiIap';export async function httpRequestPayment(orderId: string, method: string) {// 1. 从服务端获取支付参数const httpReq = http.createHttp();const response = await httpReq.request('https://your-api.com/payment/prepare',{method: 'POST',header: { 'Content-Type': 'application/json' },extraData: JSON.stringify({ orderId, method })});const params = JSON.parse(response.result);// 2. 调用支付SDKswitch (method) {case '华为支付':return HuaweiIap.startPayment({orderId: params.hwOrderId,amount: params.amount,currency: 'CNY'});case '微信支付':// 调用微信SDK...break;default:throw new Error('不支持的支付方式');}
}

三、服务端实现 (Spring Boot)

1. 支付准备接口

// PaymentController.java
@RestController
@RequestMapping("/payment")
public class PaymentController {@Autowiredprivate PaymentService paymentService;@PostMapping("/prepare")public ResponseEntity<PaymentPrepareResponse> preparePayment(@RequestBody PaymentPrepareRequest request) {// 校验订单状态Order order = orderService.validateOrder(request.getOrderId());// 生成支付参数(不同支付平台)PaymentPrepareResponse response;switch (request.getMethod()) {case "华为支付":response = huaweiPayService.generateParams(order);break;case "支付宝":response = alipayService.generateParams(order);break;default:throw new IllegalArgumentException("不支持的支付方式");}return ResponseEntity.ok(response);}
}

2. 支付回调处理

// PaymentCallbackController.java
@RestController
@RequestMapping("/payment/callback")
public class PaymentCallbackController {@PostMapping("/huawei")public String huaweiCallback(@RequestBody HuaweiPayNotify notify) {// 1. 验证签名if (!huaweiPayService.verifySignature(notify)) {return "FAIL";}// 2. 更新订单状态orderService.updateOrderStatus(notify.getOrderId(), OrderStatus.PAID,notify.getTransactionId());// 3. 通知司机端(通过WebSocket)websocketHandler.notifyDriverPaymentCompleted(notify.getOrderId());return "SUCCESS";}
}

四、华为支付集成关键步骤

1. 配置module.json5

{"module": {"requestPermissions": [{"name": "ohos.permission.PAYMENT","reason": "使用华为支付功能"}],"abilities": [{"skills": [{"actions": ["hwpay.action.PAY"]}]}]}
}

2. 调用华为IAP SDK

// 华为支付封装
import { HuaweiIap } from '@ohos/huaweiIap';export async function huaweiPay(orderId: string, amount: number) {try {const result = await HuaweiIap.startPayment({orderId: orderId,amount: amount,currency: 'CNY',productName: '网约车订单',serviceCatalog: 'CAR_HAILING' // 业务类型});if (result.paymentState === 0) { // 0表示成功return { code: 200, msg: '支付成功' };} else {throw new Error(`支付失败: ${result.errorMsg}`);}} catch (err) {throw new Error('支付异常: ' + err.message);}
}

五、支付问题总结

在鸿蒙(HarmonyOS)应用中,乘客输入密码支付的流程通常由华为支付(HUAWEI IAP)SDK内部处理,开发者无需直接编写密码输入界面。
在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/a/499322.html

相关文章:

  • 如何把自己做的网站放到网上360建筑网怎样取消发布的消息
  • 做网站有哪个空间网站建设优化推广贵州
  • 西电25年A测 语音识别机械臂方案与教程
  • 数据结构——队列的链式存储结构
  • 媒体135网站口碑好的宜昌网站建设
  • 湖南省建设银行网站官网深圳龙华网站建设公司
  • 网站后台管理系统源码网站空间文件夹
  • 元宇宙与公共服务的深度融合:重构民生服务的效率与温度
  • 深入解析十字链表:从理论到实践的全面指南
  • 红色页面网站护肤品网站建设的摘要
  • GB28181视频服务wvp部署(一)
  • 吴忠住房和城乡建设局网站小学生编程网课前十名
  • 浅谈 OpenAPI Schema—— 接口契约的标准语言
  • TSDF 体素模型与光线投射
  • 【学习笔记】利用meshlab进行曲面的质量检查
  • S2--单链表
  • jdk.random 包详解
  • 如何做网站接口关于电子商务网站建设的现状
  • 网站栏目设计内容谷歌在线浏览器入口
  • 聊聊 Unity(小白专享、C# 小程序 之 自动更新)
  • 截取网站流量dede购物网站
  • 某Boss直聘数据获取
  • Spring Boot 3零基础教程,WEB 开发 默认欢迎页 笔记28
  • Redis极简入门 整合springboot
  • 漫蛙漫画官网入口 - 免费漫画在线看|防走失页入口
  • MySQL中的约束详解
  • 服务流程企业网站东莞市建设安监监督网站
  • leetcode 206. 反转链表 python
  • 【C语言】自定义类型(附源码与图片分析)
  • 用户头像文件存储功能是如何实现的?