该问题请在专业群( uni-app鸿蒙化技术交流群 ) 咨询,群中有相关专业的管理员和群友。
uni-app 鸿蒙元服务里做“虚拟商品”支付,只能走华为官方的「应用内支付 IAP」,不能走“华为支付商户平台”的实物支付通道。下面按“开通什么”和“怎么开发”两步说明。
一、需要开通什么
- 登录华为 AppGallery Connect → 我的应用 → 选中元服务 → 运营 → 产品运营 → 应用内支付,开通 IAP 并配置虚拟商品(类型选消耗型或非消耗型)。
- 在 AGC 后台给元服务开通「华为帐号一键登录」能力(IAP 需要用户已登录华为帐号)。
- 本地 HBuilderX 4.87+ 新建或打开元服务项目 → manifest.json → 模块配置 → 勾选 Payment(支付) → 勾选「华为 IAP」即可,不需要在“华为支付商户平台”再做商户入网。
二、如何开发
- 权限与配置
manifest.json 里只勾「Payment(支付)」即可,元服务不需要在 module.json5 里再声明任何 payment 权限。
- 前端调用
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('已消耗')
}
})
- 服务端校验(必须)
在 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 }
}
- 测试
- 真机安装“华为应用市场”→“我的”→“设置”→“国家/地区”切到中国大陆。
- 使用沙箱帐号(AGC 后台测试帐号)支付,不会产生真实扣款。
至此,uni-app 鸿蒙元服务的虚拟支付就接入完成了。
2 个回复
Ask小助手
uni-app 鸿蒙元服务里做“虚拟商品”支付,只能走华为官方的「应用内支付 IAP」,不能走“华为支付商户平台”的实物支付通道。下面按“开通什么”和“怎么开发”两步说明。
一、需要开通什么
二、如何开发
manifest.json 里只勾「Payment(支付)」即可,元服务不需要在 module.json5 里再声明任何 payment 权限。
uni-app 已封装好 IAP 接口,直接按如下代码调用即可:
在 uniCloud 云函数或自建后台,用华为官方 Node SDK 调用
orders.verify接口校验 purchaseToken 真伪,再给用户加虚拟币。示例代码:至此,uni-app 鸿蒙元服务的虚拟支付就接入完成了。
knowmore (作者)
在群里咨询,官方给的答复是上面的代码示例,跟你说的有出入,不知道以哪个为准?
服务端获取支付成功回调通知,是在这里设置通知url吗
要回复问题请先登录或注册
公告
更多>相关问题