经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
maui BlazorWebView+本地html (vue、uniapp等都可以) 接入支付宝sdk 进行支付宝支付 开发 Android app
来源:cnblogs  作者:落叶子  时间:2023/3/22 9:25:34  对本文有异议

 

首先添加支付宝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 指在不同的平台下执行操作 

  1. using Microsoft.JSInterop;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Diagnostics;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Text.Encodings.Web;
  8. using System.Text.Json;
  9. using System.Text.Unicode;
  10. using System.Threading.Tasks;
  11. using static System.Runtime.InteropServices.JavaScript.JSType;
  12. namespace MauiApp7
  13. {
  14. public static class PublicMethods
  15. {
  16. [JSInvokable]
  17. public static async Task AliPays(IJSObjectReference objRef,string aliPayStrs)
  18. {
  19. #if ANDROID
  20. _ =Task.Run(async () =>
  21. {
  22. string con = aliPayStrs;//调用支付宝app支付接口返回的内容
              var act = Microsoft.Maui.ApplicationModel.Platform.CurrentActivity;
  23. Com.Alipay.Sdk.App.PayTask pa = new Com.Alipay.Sdk.App.PayTask(act);
  24. var result = pa.PayV2(con, true);
  25. var resultStatus = result.TryGetValue("resultStatus",out string resultStatusDic)? resultStatusDic:"-1";
  26. var memo = result.TryGetValue("memo",out string memoDic)? memoDic:"";
  27. if (resultStatus == "9000")
  28. {
  29. memo = "支付成功";
  30. }
  31. else if (resultStatus == "-1")
  32. {
  33. memo = "支付失败";
  34. }
  35. //执行前端html window上注册的回调方法
  36. await objRef.InvokeVoidAsync("aliPayCallBack", new { resultStatus = resultStatus, memo = memo });
  37. });
  38. #endif
  39. }
  40. }
  41. }

 

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

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

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

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

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

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport"
  6. content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
  7. <title>MauiApp7</title>
  8. <base href="/" />
  9. <!--引用jquery 可以自行引入-->
  10. <script src="lib/jquery.min.js"></script>
  11. </head>
  12.  
  13. <body>
  14. <button style="width: 100%;background: rgb(5, 200, 235);border: 0rem;" id="zhifuapp">支付宝App支付</button><br /><br />
  15. <script src="_framework/blazor.webview.js" autostart="false" crossorigin="anonymous"></script>
  16. <script>
  17. $(function () {
  18. var jsObjectReference;
  19. $("#zhifuapp").click(function () {
  20. // 调佣服务接口获取支付宝app支付需要的请求字符串(res) returnUrl quitUrl参数忽略这是我自己测试用的
  21. $.post("https://xxxx/ali/create-maui-app", { returnUrl:"", quitUrl: "" }, function (res) {
  22. jsObjectReference = DotNet.createJSObjectReference(window);
  23. DotNet.invokeMethodAsync('MauiApp7', 'AliPays', jsObjectReference, res)
  24. .then(data => {
  25. console.log(data);
  26. });
  27. }).error(function (res) {
  28. alert("出现错误:" + JSON.stringify(res));
  29. })
  30. })
  31. //window上注册支付回调方法
  32. window.aliPayCallBack = (res) => {
  33. if (jsObjectReference) {
  34. DotNet.disposeJSObjectReference(jsObjectReference);
  35. }
  36. alert("执行了支付宝支付回调" + JSON.stringify(res));
  37. }
  38. })
  39. </script>
  40. </body>
  41.  
  42. </html>

 自此完成

原文链接:https://www.cnblogs.com/lkd3063601/p/17241939.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号