2026/4/17 13:07:21
网站建设
项目流程
临沂 网站建设,做网站流程视频,wordpress未验证邮箱,朝阳seo建站引言在移动应用开发中#xff0c;虚拟商品支付是核心功能之一#xff0c;而针对iOS平台#xff0c;苹果App Store强制要求虚拟商品必须通过其官方内购渠道完成交易#xff0c;这使得Uniapp项目集成苹果内购成为iOS端开发的必备技能。本文将全面复盘Uniapp苹果内购支付的完整…引言在移动应用开发中虚拟商品支付是核心功能之一而针对iOS平台苹果App Store强制要求虚拟商品必须通过其官方内购渠道完成交易这使得Uniapp项目集成苹果内购成为iOS端开发的必备技能。本文将全面复盘Uniapp苹果内购支付的完整流程涵盖Uniapp项目代码集成、苹果开发者后台App ID创建、App Store Connect内购项目配置及最终打包提交全环节并提供可直接参考的实战代码示例助力开发者快速攻克内购集成难题。一、前期准备明确核心前提与工具在正式开始内购集成前需确保完成以下基础准备工作避免后续流程出现阻塞苹果开发者账号必须拥有有效的苹果开发者账号个人账号、公司账号均可但个人账号无法使用某些企业级功能推荐使用公司账号且账号状态正常已完成付费订阅。内购功能仅对已付费的开发者账号开放。Uniapp项目基础确保Uniapp项目已完成基础开发明确需要接入内购的虚拟商品如会员、积分、道具等并规划好商品的唯一标识将用于内购项目配置与代码关联。开发工具准备好HBuilderX用于Uniapp项目开发与打包、Xcode可选用于iOS端调试以及苹果开发者后台、App Store Connect后台的访问权限。视频教程二、核心步骤一Uniapp项目集成苹果内购代码Uniapp封装了苹果内购的相关API开发者无需深入原生开发即可快速集成。核心流程包括获取支付渠道、请求商品信息、发起支付请求、处理支付结果。以下是完整的代码示例及详细解析。2.1 完整集成代码示例在Uniapp项目的页面组件中可通过以下代码实现内购支付的核心逻辑需根据实际业务场景修改商品标识、支付结果处理逻辑等内容// 触发苹果内购支付的入口函数 payFun() { let that this; // 1. 获取当前设备支持的支付渠道 uni.getProvider({ service: payment, // 指定服务类型为支付 success: (paymentRes) { // 筛选出苹果内购渠道渠道ID为appleiap const iapChannel paymentRes.providers.find((channel) { return channel.id appleiap; }); // 若未找到苹果内购渠道提示不支持 if (!iapChannel) { uni.showToast({ title: 暂不支持苹果支付, icon: none, duration: 2000 }); return; } // 2. 请求商品信息key为内购项目的产品ID需与App Store Connect配置一致 let productId newOceanOneYear; // 示例年度会员商品ID多商品时可动态替换 iapChannel.requestProduct([productId], // 商品请求成功回调 function(orderList) { console.log(获取商品信息成功, orderList); // 校验商品列表有效性发起支付 if (orderList orderList.length 0) { that.applePay(orderList[0]); // 传入商品信息执行支付 } else { uni.showToast({ title: 未获取到商品信息, icon: none }); } }, // 商品请求失败回调 function(error) { console.error(获取商品信息失败, error); uni.showToast({ title: 商品信息加载失败请重试, icon: none }); } ); }, // 获取支付渠道失败回调 fail(err) { console.error(获取支付渠道失败, err); uni.showToast({ title: 支付功能初始化失败, icon: none }); } }); }, // 发起苹果内购支付的具体实现 applePay(product) { const that this; // 显示加载提示防止用户重复操作 uni.showLoading({ title: 充值中请勿离开, mask: true// 遮罩防止背景点击 }); // 3. 调用Uniapp支付API发起内购请求 uni.requestPayment({ provider: appleiap, // 固定为苹果内购渠道 orderInfo: { productId: product.productId, // 商品ID与请求的商品信息一致 // 注意苹果内购的orderInfo无需传入订单号等信息由苹果后台生成交易凭证 }, // 支付成功回调 success: (payRes) { uni.hideLoading(); console.log(支付请求成功, payRes); // 苹果内购交易状态说明transactionState为1表示交易成功 if (payRes.transactionState 1) { uni.showToast({ title: 支付成功, icon: success }); // 关键此处需调用后端接口传入支付凭证payRes.transactionReceipt进行验证 that.verifyPayment(payRes.transactionReceipt); } else { // 处理其他交易状态如交易待确认、已取消等 uni.showToast({ title: 支付状态异常请核实, icon: none }); } }, // 支付失败回调 fail: (payErr) { uni.hideLoading(); console.error(支付失败, payErr); // 区分用户主动取消与其他错误 if (payErr.errMsg.includes(cancel)) { uni.showToast({ title: 您已取消支付, icon: none }); } else { uni.showToast({ title: 支付失败请重试, icon: none }); } }, // 支付完成回调无论成功失败都会执行 complete: () { uni.hideLoading(); } }); }, // 支付凭证验证核心苹果内购必须通过后端与苹果服务器验证防止本地伪造 verifyPayment(receipt) { // 调用后端接口将凭证传给服务器进行验证 uni.request({ url: that.$api.verifyApplePay, // 后端验证接口地址 method: POST, data: { receipt: receipt, // 苹果返回的交易凭证 productId: newOceanOneYear, // 对应的商品ID userId: that.userId // 当前用户ID用于关联订单 }, success: (res) { if (res.data.code 200 res.data.data.isValid) { console.log(凭证验证成功订单已确认); // 执行后续业务逻辑如更新会员状态、发放道具等 that.updateMemberStatus(); } else { console.error(凭证验证失败, res.data.msg); uni.showToast({ title: 订单验证失败请联系客服, icon: none }); } }, fail: (err) { console.error(验证接口请求失败, err); uni.showToast({ title: 网络异常订单验证中, icon: none }); } }); }2.2 代码关键说明支付渠道获取通过uni.getProvider获取设备支持的支付方式筛选出苹果内购appleiap确保仅在支持的设备上触发内购。商品信息请求requestProduct方法传入商品ID从苹果服务器获取商品的名称、价格等信息避免本地硬编码价格导致与App Store不一致。支付结果处理transactionState为1是苹果内购成功的核心标识但必须通过后端验证凭证不能仅依赖前端状态——前端状态可被篡改苹果服务器的凭证验证才是唯一可靠的依据。凭证验证后端需将前端传入的transactionReceipt提交至苹果的验证服务器沙盒环境https://sandbox.itunes.apple.com/verifyReceipt正式环境https://buy.itunes.apple.com/verifyReceipt根据返回结果确认支付有效性。三、核心步骤二苹果开发者后台创建App ID并配置内购权限App ID是应用的唯一标识也是启用内购功能的基础。需在苹果开发者后台创建并配置对应的权限具体步骤如下3.1 登录苹果开发者后台访问苹果开发者官网https://developer.apple.com/account/使用已付费的开发者账号登录进入“Certificates, Identifiers Profiles”证书、标识和配置文件页面。3.2 创建App ID点击左侧“Identifiers”然后点击右上角“”号选择“App IDs”点击“Continue”。选择“App”类型适用于iOS、macOS等平台的应用点击“Continue”。填写App ID信息Description应用描述如“XX会员服务App”将显示在开发者后台。Bundle ID应用的唯一标识符格式为反向域名如“com.company.appname”必须与Uniapp项目的“manifest.json”中配置的iOS Bundle ID完全一致后续打包、上架均依赖此ID。启用内购权限在“Capabilities”列表中找到“App内购买项目”In-App Purchase并勾选确保该权限处于启用状态。其他权限根据应用需求选择完成后点击“Continue”。确认信息无误后点击“Register”完成App ID创建。3.3 关键注意事项App ID创建后不可修改Bundle ID因此需提前规划好格式内购权限一旦勾选无需额外申请但需确保开发者账号状态正常否则权限可能无法生效。四、核心步骤三App Store Connect配置内购项目App Store Connect是管理应用上架、内购项目的平台需在此处创建内购商品并与Uniapp项目中的商品ID关联。核心目标是将虚拟商品信息录入苹果系统使其能被App请求并完成交易。4.1 登录App Store Connect并关联App访问App Store Connecthttps://appstoreconnect.apple.com/使用与开发者账号关联的Apple ID登录。若未创建应用点击“我的App”→“”号→“新建App”填写应用名称、Primary Language、Bundle ID选择步骤二中创建的App ID对应的Bundle ID等信息完成应用创建。若已创建应用直接进入应用管理页面。4.2 创建内购项目进入应用管理页面点击左侧“功能”→“App内购买项目”然后点击右上角“”号选择内购项目类型。苹果内购项目分为以下几类需根据商品类型选择消耗型项目如游戏道具、一次性积分购买后可重复购买消耗后需再次购买。非消耗型项目如永久解锁的功能购买一次即可永久使用支持恢复购买。自动续期订阅如月度/年度会员到期自动扣费续期支持免费试用。非续期订阅如季度会员到期后需手动续期不自动扣费。以“自动续期订阅”如年度会员为例选择对应类型后点击“创建”。填写内购项目基本信息参考名称仅用于开发者后台识别如“年度会员-12个月”。产品ID核心标识需与Uniapp代码中productId完全一致如示例中的“newOceanOneYear”建议格式为“com.company.appname.productname”便于管理。清理级别根据商品内容选择一般选择“4”即可。设置价格与地区选择商品的价格等级苹果提供固定的价格档位不同地区货币自动转换设置是否允许在特定地区销售完成后点击“存储”。填写商品描述与元数据上传商品图标尺寸为1024x1024无圆角PNG格式、填写商品名称将显示在App内购界面、描述介绍商品权益完成后点击“存储”。4.3 设置内购项目状态为“准备提交”内购项目创建完成后状态默认为“等待审核”需手动将其设置为“准备提交”在“App内购买项目”列表中找到创建的项目点击进入详情页确认所有信息填写完整后点击“状态”下拉框选择“准备提交”。关键提醒此时仅需将内购项目设置为“准备提交”无需单独提交审核后续与App一起提交审核即可避免提前提交导致审核驳回。五、核心步骤四HBuilderX打包IPA并提交审核Uniapp项目代码集成与苹果后台配置完成后需通过HBuilderX打包生成iOS安装包IPA并提交至App Store Connect进行审核审核通过后内购功能方可正式生效。5.1 HBuilderX配置与打包打开Uniapp项目进入“manifest.json”配置页面选择“App原生配置”→“iOS配置”Bundle ID填写与苹果开发者后台创建的App ID一致的Bundle ID如“com.company.appname”。启用内购在“模块配置”中找到“Payment(支付)”模块勾选“Apple In-App Purchase苹果内购”确保该模块被启用。点击“发行”→“原生App-云打包”选择“iOS打包”打包类型若用于提交审核选择“正式打包”若用于测试选择“测试打包”需配置测试证书。证书配置上传苹果开发者后台生成的发布证书p12文件与描述文件mobileprovision确保证书与Bundle ID匹配且包含内购权限。其他配置根据需求设置应用名称、版本号等点击“开始打包”等待打包完成后下载IPA文件。5.2 提交IPA至App Store Connect并关联内购项目通过Xcode或Transporter工具将IPA文件上传至App Store Connect Transporter工具登录后点击“添加App”选择下载的IPA文件验证通过后点击“交付”完成上传。Xcode连接iOS设备选择“Window”→“Organizer”找到打包的应用归档文件点击“Distribute App”选择“App Store Connect”按提示完成上传。关联内购项目在App Store Connect的应用管理页面进入“App信息”→“App内购买项目”确保创建的内购项目已被关联至当前应用。提交审核进入“提交审核”页面填写审核信息如联系人、测试账号等确认应用与内购项目均处于“准备提交”状态后点击“提交审核”。苹果审核周期一般为1-3个工作日审核通过后应用与内购功能将同步上线。六、常见问题与避坑指南商品请求失败检查商品ID与App Store Connect配置的一致确认App ID已勾选内购权限测试时需使用沙盒测试账号且设备未登录正式Apple ID。支付成功后凭证验证失败区分沙盒与正式环境——测试时后端需调用苹果沙盒验证接口正式上线后切换至正式接口确保凭证未被篡改且与当前用户、商品ID关联正确。审核驳回内购项目未配置完整检查内购项目的图标、描述、价格等信息是否填写完整确保内购项目状态为“准备提交”且与应用关联正确。恢复购买功能缺失对于非消耗型项目与订阅项目需实现恢复购买功能调用iapChannel.restoreCompletedTransactions方法否则可能被审核驳回。七、总结Uniapp苹果内购支付的核心在于“代码集成-后台配置-凭证验证-审核上线”的全流程闭环其中商品ID的一致性、凭证的后端验证、内购项目的状态配置是关键节点。开发者需严格遵循苹果的规则确保每一步操作符合规范同时做好测试工作使用沙盒测试账号模拟支付场景避免上线后出现功能异常。通过本文的流程梳理与代码示例希望能帮助开发者高效完成内购集成为iOS用户提供流畅的支付体验。