首页 > 其他分享 >maui BlazorWebView+本地html (vue、uniapp等都可以) 接入支付宝sdk 进行支付宝支付 开发 Android app

maui BlazorWebView+本地html (vue、uniapp等都可以) 接入支付宝sdk 进行支付宝支付 开发 Android app

时间:2023-03-21 23:03:44浏览次数:66  
标签:支付宝 vue uniapp res System resultStatus using Android

 

首先添加支付宝sdk的绑定库   

nuget 包:Chi.MauiBinding.Android.AliPay

项目地址:https://github.com/realZhangChi/MauiBinding

新建maui Blazor应用,在根目录创建一个静态类PublicMethods.cs (类名位置都可以自定义,这个静态类主要给html js 调用使用的,js调用服务端方法 从 ASP.NET Core Blazor 中的 JavaScript 函数调用 .NET 方法 | Microsoft Learn

注意其中的 #if ANDROID  IOS 指在不同的平台下执行操作 

using Microsoft.JSInterop;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;
using System.Threading.Tasks;
using static System.Runtime.InteropServices.JavaScript.JSType;

namespace MauiApp7
{
   
   
    public static class PublicMethods
    {
        
        [JSInvokable]
        public static async Task AliPays(IJSObjectReference objRef,string aliPayStrs)
        {
#if ANDROID

            _ =Task.Run(async () =>
            {
                
                string con = aliPayStrs;//调用支付宝app支付接口返回的内容
                var options = new JsonSerializerOptions
                {
                    Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
                };
                var act = Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
                Com.Alipay.Sdk.App.PayTask pa = new Com.Alipay.Sdk.App.PayTask(act);
                var result = pa.PayV2(con, true);
                var resultStatus = result.TryGetValue("resultStatus",out string resultStatusDic)? resultStatusDic:"-1";
                var memo = result.TryGetValue("memo",out string memoDic)? memoDic:"";

                if (resultStatus == "9000")
                {
                   
                    memo = "支付成功";
                   
                }
                else if (resultStatus == "-1")
                {
                    memo = "支付失败";
                }
                //执行前端html window上注册的回调方法
                await objRef.InvokeVoidAsync("aliPayCallBack", new { resultStatus = resultStatus, memo = memo });

            });
#endif
        }
    }
}

 

1.修改MainPage.xaml 中的代码,删除BlazorWebView 下子内容,修改后的代码为

 <BlazorWebView x:Name="blazorWebView" HostPage="wwwroot/index.html"  BlazorWebViewInitialized="blazorWebView_BlazorWebViewInitialized">
  </BlazorWebView>

修改MainPage.xaml.cs中代码添加BlazorWebViewInitialized 事件,此事件是允许BlazorWebView在Android平台下能够同时访问http和https的混合请求,需搭配android:usesCleartextTraffic="true" 使用 具体参考 maui BlazorWebView Android 中混合使用https和http - 落叶子 - 博客园 (cnblogs.com)

  private void blazorWebView_BlazorWebViewInitialized(object sender, Microsoft.AspNetCore.Components.WebView.BlazorWebViewInitializedEventArgs e)
        {
           
#if ANDROID
          e.WebView.Settings.MixedContentMode = Android.Webkit.MixedContentHandling.AlwaysAllow;
#endif
        }

2. 修改 wwwroot下的index.html  具体代码为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport"
          content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
    <title>MauiApp3</title>
    <base href="/" />
    <!--引用jquery 可以自行引入-->
    <script src="lib/jquery.min.js"></script>
</head>

<body>
   
    <button style="width: 100%;background: rgb(5, 200, 235);border: 0rem;" id="zhifuapp">支付宝App支付</button><br /><br />
    <script src="_framework/blazor.webview.js" autostart="false" crossorigin="anonymous"></script>
    <script>
        $(function () {
            var jsObjectReference;
            $("#zhifuapp").click(function () {
                // 调佣服务接口获取支付宝app支付需要的请求字符串(res)  returnUrl quitUrl参数忽略这是我自己测试用的
                $.post("https://xxxx/ali/create-maui-app", { returnUrl:"", quitUrl: "" }, function (res) {
                    jsObjectReference = DotNet.createJSObjectReference(window);
                    DotNet.invokeMethodAsync('MauiApp7', 'AliPays', jsObjectReference, res)
                        .then(data => {
                            console.log(data);
                        });
                }).error(function (res) {
                    alert("出现错误:" + JSON.stringify(res));
                })
            })
            //window上注册支付回调方法
            window.aliPayCallBack = (res) => {
                if (jsObjectReference) {
                    DotNet.disposeJSObjectReference(jsObjectReference);
                }
                alert("执行了支付宝支付回调" + JSON.stringify(res));
            }

        })
       
    </script>
</body>

</html>

 自此完成

标签:支付宝,vue,uniapp,res,System,resultStatus,using,Android
From: https://www.cnblogs.com/lkd3063601/p/17241939.html

相关文章

  • #yyds干货盘点#vue设置跨域proxy
    创建​​vue.config.js​​文件//方法1module.exports={devServer:{host:'localhost',port:'8083',proxy:{'/api':{//......
  • 记录一次支付宝无法跳转到支付页面Bug处理过程
    背景使用apicloud将h5项目打包成app,在该项目中用到了支付宝付款的api,流程是前端将订单信息提交到后端,后端返回一个url,前端跳转到这个url,页面如下。在浏览器中可以正常跳转......
  • vue.js项目打包报错Error: You appear to be using a native ECMAScript module confi
    问题描述报错:Error:YouappeartobeusinganativeECMAScriptmoduleconfigurationfile,whichisonlysupportedwhenrunningBabelasynchronously.原因是我......
  • Vue2 快速上手
    1.声明式渲染通过{{}}将数据渲染到页面:<body><divid="app">{{message}}</div></body><script>varapp=newVue({el:'#app',......
  • Vue10*10图片表格的点击效果
    要求.使用Vue及自定义组件完成10*10图片表格点击效果效果图过程:一.用PS切图1.打开PS,选择切图工具,在左边复选框选择切图工具。  2.单击右键鼠标,选择划分切片。......
  • 使用vue完成图片表格的点击因隐藏效果
    首先了解整个项目可以分几个板块。图片的切割,图片放入的框架构建,图片放入。1.图片的分割,这里的图片分割可以使用PS,或者网上搜图片切割的网站上传图片就行(http://www.zuoha......
  • vue 默认margin:8px
    #问题情景之前新拉取的vue项目,今天在更换背景图片的时候,发现,图片与顶部有缝隙,查看后发现,body属性中有margin:8px的属性,但是我程序代码中,外层并没有相关设置,且该body是在我......
  • vue 添加 不蒜子 统计计数
    #之前都是在jq环境当中使用卜算子的,感觉还是比较方便#现在使用vue搭建个人博客,当然也要入乡随俗了#步入正题1.环境依赖安装yarnaddbusuanzi.pure.js#ornpminstallb......
  • 详解uniapp和vue在路由方面的不同和联系
    Uniapp和Vue在路由方面有相似之处,因为Uniapp是基于Vue的。Uniapp的路由系统是通过VueRouter实现的,因此两者有许多相同的概念和API。相同点:都支持基于URL......
  • 【Vue3官方教程】万字笔记 | 同步导学视频
    ......