knowmore
knowmore
  • 发布:2026-01-31 15:06
  • 更新:2026-01-31 17:12
  • 阅读:21

【急需解决】uniapp开发的元服务想实现虚拟支付,需要开通什么及如何开发?

分类:uni-app

uniapp开发的元服务想实现虚拟支付,需要开通什么(是应用内支付,还是 华为支付商户平台 开通?)及如何开发?(需要勾选哪些权限,及代码如何实现?)

2026-01-31 15:06 负责人:DCloud_UNI_OttoJi 分享
已邀请:
Ask小助手

Ask小助手

该问题请在专业群( uni-app鸿蒙化技术交流群 ) 咨询,群中有相关专业的管理员和群友。

uni-app 鸿蒙元服务里做“虚拟商品”支付,只能走华为官方的「应用内支付 IAP」,不能走“华为支付商户平台”的实物支付通道。下面按“开通什么”和“怎么开发”两步说明。

一、需要开通什么

  1. 登录华为 AppGallery Connect → 我的应用 → 选中元服务 → 运营 → 产品运营 → 应用内支付,开通 IAP 并配置虚拟商品(类型选消耗型或非消耗型)。
  2. 在 AGC 后台给元服务开通「华为帐号一键登录」能力(IAP 需要用户已登录华为帐号)。
  3. 本地 HBuilderX 4.87+ 新建或打开元服务项目 → manifest.json → 模块配置 → 勾选 Payment(支付) → 勾选「华为 IAP」即可,不需要在“华为支付商户平台”再做商户入网。

二、如何开发

  1. 权限与配置
    manifest.json 里只勾「Payment(支付)」即可,元服务不需要在 module.json5 里再声明任何 payment 权限。
  2. 前端调用
    uni-app 已封装好 IAP 接口,直接按如下代码调用即可:
// 1. 查询商品  
uni.requestPayment({  
  provider: 'huawei-iap',  
  orderInfo: {  
    action: 'queryProduct',  
    productIds: ['gem_60', 'gem_120']   // 在 AGC 后台配置的虚拟商品 ID  
  },  
  success(res) {  
    console.log('商品信息', res.productInfo)  
  }  
})  

// 2. 发起购买  
uni.requestPayment({  
  provider: 'huawei-iap',  
  orderInfo: {  
    action: 'purchase',  
    productId: 'gem_60',  
    developerPayload: '自定义透传字段'  
  },  
  success(res) {  
    // res 包含 purchaseToken、orderId 等  
    // 把 purchaseToken 发给服务端做校验并发货  
    console.log('支付成功', res)  
  },  
  fail(err) {  
    console.log('支付失败', err)  
  }  
})  

// 3. 消耗型商品发货后必须消耗  
uni.requestPayment({  
  provider: 'huawei-iap',  
  orderInfo: {  
    action: 'consume',  
    purchaseToken: '上一步返回的 purchaseToken'  
  },  
  success() {  
    console.log('已消耗')  
  }  
})
  1. 服务端校验(必须)
    在 uniCloud 云函数或自建后台,用华为官方 Node SDK 调用 orders.verify 接口校验 purchaseToken 真伪,再给用户加虚拟币。示例代码:
// uniCloud 云函数示例  
const iap = require('@hmscore/hms-iap-server')  
exports.main = async (event, context) => {  
  const { purchaseToken } = event  
  const result = await iap.verifyPurchase(purchaseToken)  
  if (result.code === 0) return { ok: true }  
  return { ok: false }  
}
  1. 测试
    • 真机安装“华为应用市场”→“我的”→“设置”→“国家/地区”切到中国大陆。
    • 使用沙箱帐号(AGC 后台测试帐号)支付,不会产生真实扣款。

至此,uni-app 鸿蒙元服务的虚拟支付就接入完成了。

内容为 AI 生成,仅供参考
knowmore

knowmore (作者)

let orderInfo={  
                    productId: '4',   // 第1步生成的商品ID  
                    productType: 1,                 // 1 消耗型 2 非消耗型  
                    developerPayload: 'user123'     // 透传给服务端做校验  
                  };  
                orderInfo=JSON.stringify(orderInfo);  
                uni.requestPayment({  
                  provider: 'huawei-iap',  
                  orderInfo: orderInfo,  
                  success(res) {  
                    // 支付完成,res 包含 purchaseToken、orderId 等  
                    // 必须将 purchaseToken 发送到服务端做二次验证  
                    //verifyOnServer(res.purchaseToken)  
                    console.log(res);  
                  },  
                  fail(err) {  
                      console.log(err);  
                    uni.showToast({ title: '支付失败:' + err.errMsg, icon: 'none' });  
                  }  
                });

在群里咨询,官方给的答复是上面的代码示例,跟你说的有出入,不知道以哪个为准?

服务端获取支付成功回调通知,是在这里设置通知url吗

要回复问题请先登录注册