12、xamarin form中实现H5 网页唤醒微信支付的方法
在微信的支付中有种支付叫微信H5支付。方便用户在网页中轻松唤起微信进行支付。
当然微信不推荐大家使用这样的方式唤起微信支付。建议app还是使用正常的微信支付sdk即可
服务端与其他的建议参考微信支付官网进行适配我这里只讨论如何在xamarin forms 中嵌入Html5 实现支付
这里面有个问题就是如果没有安装微信app 是需要进行一些判断的
开始建立相关的代码
打开 MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:WeChatPayDemo"
x:Class="WeChatPayDemo.MainPage"> <StackLayout>
<WebView x:Name="wb" IsVisible="True" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"> </WebView>
</StackLayout> </ContentPage>
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
} protected override void OnAppearing()
{
base.OnAppearing();
wb.Source = new UrlWebViewSource
{
Url = "http://wxpay.wxutil.com/mch/pay/h5.v2.php"
}; } }
然后安卓项目里面增加
WebRenderer.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Webkit;
using Android.Widget;
using Xamarin.Forms;
using Xamarin.Forms.Internals;
using Xamarin.Forms.Platform.Android;
using AWebView = Android.Webkit.WebView;
[assembly: Xamarin.Forms.ExportRenderer(typeof(Xamarin.Forms.WebView), typeof(WeChatPayDemo.Droid.WebRenderer))]
namespace WeChatPayDemo.Droid
{
public class WebRenderer : ViewRenderer<Xamarin.Forms.WebView, AWebView>
{
Context _context; public WebRenderer(Context context) : base(context)
{
_context = context;
} protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e); if (Control == null)
{
var webView = new AWebView(_context);
webView.SetWebViewClient(new WebViewClient(_context));
webView.Settings.JavaScriptEnabled = true;
SetNativeControl(webView);
}
} protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (Control != null && e.PropertyName == "Source")
{
var src = Element.Source as UrlWebViewSource;
Control.LoadUrl(src.Url);
}
}
} public class WebViewClient : Android.Webkit.WebViewClient
{
private Context _context;
public WebViewClient(Context context)
{
_context = context;
}
public override bool ShouldOverrideUrlLoading(AWebView view, IWebResourceRequest request)
{
if (request.Url.Scheme == "weixin")
{
Intent intent = new Intent() { };
intent.SetAction(Intent.ActionView);
intent.SetData(request.Url);
this._context.StartActivity(intent);
return true;
}
return base.ShouldOverrideUrlLoading(view, request);
} [Obsolete]
public override bool ShouldOverrideUrlLoading(AWebView view, string url)
{
if (url.StartsWith("weixin"))
{
Intent intent = new Intent() { };
intent.SetAction(Intent.ActionView);
intent.SetData(Android.Net.Uri.Parse(url));
this._context.StartActivity(intent);
return true;
}
return base.ShouldOverrideUrlLoading(view, url);
}
} }
在iOS里面增加
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using Foundation;
using UIKit;
using Xamarin.Forms.Platform.iOS;
[assembly: Xamarin.Forms.ExportRenderer(typeof(Xamarin.Forms.WebView), typeof(WeChatPayDemo.iOS.WebRenderer))]
namespace WeChatPayDemo.iOS
{
public class WebRenderer : WebViewRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e); if (NativeView != null && e.NewElement != null)
SetupControlSettings(); } private void SetupControlSettings()
{
var webView = ((UIWebView)NativeView);
if (webView == null) return;
webView.Delegate = new CustomWebDelegate();
}
} public class CustomWebDelegate : UIWebViewDelegate
{ public override bool ShouldStartLoad(UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType)
{
if (request.Url.Scheme== "weixin")
{
UIApplication.SharedApplication.OpenUrl(request.Url);
}
return true;
} public override void LoadingFinished(UIWebView webView)
{ }
public override void LoadFailed(UIWebView webView, NSError error)
{ }
}
}
记得配置 iOS 的网络访问权限 和安卓的访问权限 至此 web里面唤起 微信支付完成
12、xamarin form中实现H5 网页唤醒微信支付的方法的更多相关文章
- 在Ubuntu 12.04系统中安装配置OpenCV 2.4.3的方法
在Ubuntu 12.04系统中安装配置OpenCV 2.4.3的方法 对于,在Linux系统下做图像识别,不像在windows下面我们可以利用Matlab中的图像工具箱来实现,我们必须借助Ope ...
- 前端如何在h5页面调用微信支付?
在微信服务号开发的时候经常会遇到微信支付的功能实现,通过实际经验自己总结了一下,前端在H5页面调起微信支付有两种办法,一是利用内置对象,二是通过引用微信的js sdk,亲测都能支付成功,从写法上来看用 ...
- 微信小程序web-view(webview) 嵌套H5页面 唤起微信支付的实现方案
场景:小程序页面有一个web-view组件,组件嵌套的H5页面,要唤起微信支付. 先讲一下我的项目,首先我是自己开发的一个H5触屏版的商城系统,里面含有购物车,订单支付等功能.然后刚开始,我们公众号里 ...
- H5网页唤醒app,判断app安装
在阅读本文之前你首先应该对js有基本对掌握,并且对Scheme,intent有一定的理解.更多的是代码 上午给朋友做了一个产品引导页,但是需要判断ios系统的TestFlight是否安装,进行了goo ...
- PHP中获取某个网页或文件内容的方法
1. 通过file_get_contents()函数$contents = file_get_contents('http://demo.com/index.php');echo $contents; ...
- h5网页在微信里打开 右上角分享到微信好友或者朋友圈
首先你需要一个分享接口地址,然后在自定义图片 标题 描述 如下: <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js& ...
- h5调起微信支付
后台需要进行生成签名获取参数. 前台代码: function onBridgeReady(appId,timeStamp,nonceStr,package1,paySign,signType,open ...
- 【微信H5支付】微信公众号里H5网页点击调取微信支付
最近在公众号里开发了下单支付H5网页,需要在H5里调用微信支付界面.开发思路和代码整理如下: todo...
- [5] 微信公众号开发 - 微信支付功能开发(网页JSAPI调用)
1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...
随机推荐
- 优秀前端工程师必备: cookie的增删改查Demo!
1 cookie可以很好地解决微信浏览器登录状态的保存,具体教程看下面链接: https://www.cnblogs.com/autoXingJY/p/10456767.html 2 参考了w3c等的 ...
- modelsim编译altera的库
http://www.cnblogs.com/LJWJL/p/3515586.html 在modelsim的安装目录下,把配置文件modelsim.ini的只读属性去掉,然后在modelsim中运行T ...
- day8 异常处理
异常和错误 part1:程序中难免出现错误,而错误分成两种 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) 2.逻辑错误(逻辑错误) part2:什么是异常 ...
- faceswap安装说明
Installing Faceswap Installing Faceswap Prerequisites Hardware Requirements Supported operating syst ...
- 阿里Sophix热修复
阿里巴巴对Android热修复技术已经进行了长达多年的探索. 最开始,是手淘基于Xposed进行了改进,产生了针对Android Dalvik虚拟机运行时的Java Method Hook技术,Dex ...
- Spring 配置 事务的几种方式
Spring配置文件中关于事务配置总是由三个组成部分,DataSource.TransactionManager和代理机制这三部分,无论是那种配置方法,一般变化的只是代理机制这块! 首先我创建了两个类 ...
- express session
一.什么是session? 最近在学习node.js 的express框架,接触到了关于session方面的内容.翻阅了一些的博客,学到了不少东西,发现一篇博文讲的很好,概念内容摘抄如下: Sessi ...
- C#委托总结-入门篇
1,概念:委托类型表示对具有特定参数列表和返回类型的方法的引用. 通过委托,可以将方法视为可分配给变量并可作为参数传递的实体. 委托是引用类型,可以把它看作是用来存方法的一种类型.比如说类型strin ...
- requirejs的插件介绍与制作
本文由作者郑海波授权网易云社区发布. 前言 我这里就不介绍requirejs了, 简而言之: requirejs是支持AMD规范的模块加载器, 事实上它也是AMD的最直接推动者. 现在可供挑选的开源模 ...
- Day 33 Socket编程.
套接字 (socket)处使用 基于TCP 协议的套接字 TCP 是基于链接的 ,服务器端和客户端启动没有顺序. 服务器端设置: import socket sk =socket.socket() # ...