• uniapp应用内苹果支付怎么写?


    #申请流程

    官方文档 官方这个 可以看对应参数是啥 就直接自己去看 我把我们遇到的问题和测试通过的代码 放下面了

    uni.requestPayment(OBJECT) | uni-app官网

    1. 使用苹果开发者账号登录 [App Store Connect](https://appstoreconnect.apple.com),在应用的功能选项卡页面,添加 App 内购项目。注意:
    2. - 内购项目的各信息需要填写完整,然后保存,此时内购项目的状态应该是准备提交,当提交应用通过审核后,状态则变为已批准
    3. - 测试时,建议使用测试证书打一个自定义的 iOS 基座进行测试
    4. - 在应用 TestFight 的选项卡添加 App Store Connect 用户,测试支付时可以使用此用户帐号进行测试

    #注意事项

    1、mainfest的payment支付apple应用内支付需要打钩,然后苹果支付不能勾选支付宝支付和微信支付不然就上不去,支付时候 还会有问题


    2、苹果后台开发者

    https://developer.apple.com/account/resources/certificates/list

    需要把打包的配置文件勾上苹果支付


    3、申请支付参数

    https://appstoreconnect.apple.com

    内购买项目添加支付的参数弄的目的是为了设置productid

    (这里必须注意如果设置错了 重新设置的产品id不要和之前的一样 不然就会有问题的)

    这个参数需要先上一个版本的app后才能申请让他审核,审核后才可以测试

    不然就会支付成功不回调的问题

    5、https://appstoreconnect.apple.com/access/users

    沙盒测试员添加测试账号 

    APP必须打测试包,证书勾选了苹果应用内支付才可以测试,

    沙箱环境支付不会扣费的 可以放心测试

     #支付流程

    1. 获取支付通道 (uni.getProvider)

    2. 通过支付通道获取产品列表 (iapChannel.requestProduct)

    3. 检查是否存在未关闭的订单 (iapChannel.restoreCompletedTransactions, 可选在合适的时机检查)

    4. 请求支付,传递产品信息 (uni.requestPayment)

    5. 客户端接收苹果返回的支付票据发送到服务器,在服务器请求苹果服务器验证支付是否有效

    6. 服务器验证票据有效后在客户端关闭订单 (iapChannel.finishTransaction)

     

     #前端支付代码

    1. //检查环境 that.iapChannel 这个自己定义
    2. iphonepay() {
    3. let that = this
    4. plus.payment.getChannels((res) => {
    5. let channel = res.find(i => i.id === 'appleiap')
    6. that.iapChannel = channel ? channel : null
    7. that.requestOrder()
    8. })
    9. },
    10. //获取支付通道 使用所有的产品列表去检测 that.productIds 这个自己定义获取
    11. requestOrder() {
    12. let that = this
    13. // ['xxxxx'] 是平台申请拿到的内购商品的id
    14. that.iapChannel.requestOrder(that.productIds, function(event) {
    15. uni.hideLoading()
    16. console.log(event)
    17. }, function(erroemsg) {
    18. uni.hideLoading()
    19. uni.showToast({
    20. title: "获取支付通道失败:" + errormsg.message,
    21. icon: 'none'
    22. })
    23. })
    24. },
    25. //以上环境检测 完毕成功后 点击支付的时候 调用这个 设置that.productId,
    26. topay() {
    27. uni.showLoading({
    28. title: '充值中请勿离开',
    29. mask: true
    30. })
    31. let that = this
    32. plus.payment.request(that.iapChannel, {
    33. productid: that.productId,
    34. optimize: true // 支付时设置 optimize: true
    35. }, result => {
    36. // 支付成功回调
    37. // console.log("plus.payment.request-success--------------------",JSON.stringify(results));
    38. uni.showLoading({
    39. title: '支付成功,查询结果',
    40. mask: true
    41. })
    42. //调用后端接口更新
    43. that.getIosSaveMessage(JSON.stringify(result));
    44. }, e => {
    45. uni.hideLoading();
    46. that.$queue.showToast('支付失败');
    47. });
    48. },
    49. //这个是后端自己写的接口 处理更新 金额的 吧获取的参数传后台校验
    50. getIosSaveMessage(receipt) {
    51. this.$Request.postT('/ios/isoPayApp?receipt=' + receipt + '&ordersId=' + this.ordersId).then(res => {
    52. uni.hideLoading();
    53. if (res.status == 0) {
    54. uni.showToast({
    55. title: '充值成功'
    56. })
    57. setTimeout(this.getwalletMoney(), 3000);
    58. }
    59. });
    60. },
  • 相关阅读:
    专利申请中的期限及期限的延长
    【差旅游记】初见乌海湖
    GDPU 数据结构 天码行空4
    FAST协议详解4 存在图PMap
    JavaWeb开发之——MySQL数据模型(04)
    编程中什么情况下需要加 volatile?
    windows远程连接linux并实现上传下载文件,不需要额外安装任何软件~
    更快,更稳,更智能,科聪穿梭车(RGV)快速构建方案!
    docker & k8s
    Java开发学习(三十三)----Maven私服(一)私服简介安装与私服分类
  • 原文地址:https://blog.csdn.net/weixin_39706415/article/details/127409191