knowmore
knowmore
  • 发布:2026-01-31 15:06
  • 更新:2026-02-02 14:48
  • 阅读:132

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

分类:uni-app

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

2026-01-31 15:06 负责人:DCloud_UNI_OttoJi 分享
已邀请:
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吗

knowmore

knowmore (作者)

要先请求支付,然后再发货核销?这么麻烦?!没太明白流程

DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

我看了前后的说明,目前 uni-pay 没有应用内支付的示例。这部分属于业务逻辑,你可以参考元服务 ascf 提供的文档,按照文档进行操作 https://developer.huawei.com/consumer/cn/doc/atomic-ascf/apis-iap

目前文档上流程是开通应用内购买服务、开通商户服务。如果开通过程遇到了问题,可想鸿蒙发工单进行说明。uniapp 没有封装这里的 iap,你可以尝试使用 has.createIap 发起请求,也可以尝试创建 ascf 的原生工程验证问题在哪边

  • knowmore (作者)

    前面官方回复的不是封装了iap吗,到底应该怎么调用及实现;华为那边回复如下:


    问题:请提供uniapp开发代码示例


    一、准备工作(AGC后台配置)

    在代码开发前,请务必确保以下三项配置已完成,这是支付成功的先决条件:




    1. 开通商户服务:进入开通商户服务完成实名认证及银行卡绑定。




    2. 激活应用内购买:开启和激活应用内购买服务。




    3. 配置商品:配置商品信息




    详细开发配置流程请参考:IAP开发流程。


    二、uniapp接入流程


    uniapp侧的开发代码请参考接入IAP应用内支付服务,ASCF框架中IAP服务的接口has.createIap详细参数说明如下:https://developer.huawei.com/consumer/cn/doc/atomic-ascf/apis-iap#hascreateiap

    2026-02-02 16:42

  • DCloud_UNI_OttoJi

    回复 knowmore: 小助手回复的不对,我去纠正,元服务的 api 直接看 ascf 的文档就可以,具体的 api 实现有宿主提供

    2026-02-02 17:01

  • DCloud_UNI_OttoJi

    回复 knowmore: 华为的回复没啥问题,按照要求把你的情况和鸿蒙进行沟通。这个问题是鸿蒙开放的能力,不需要 uniapp 做什么,调用的是鸿蒙开放的 api

    2026-02-02 17:02

  • knowmore (作者)

    回复 DCloud_UNI_OttoJi: 谢谢,我再跟他们沟通看看

    2026-02-02 17:04

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 生成,仅供参考

要回复问题请先登录注册