两种支付方式的特点如下:
APP支付,是指商户通过在移动端应用APP中集成开放SDK调起微信支付模块来完成支付;H5支付即公众号支付,是指用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块来完成支付。两种支付方式分别适用不同的支付场景:
APP支付适用于在移动端APP中集成微信支付功能的场景;H5支付适用于在公众号、朋友圈、聊天窗口等微信内完成支付的场景。
因为微信H5 支付有个redirect_url = “”;当这个值带有http 的时候支付完成或者取消支付的时候,返回都打开了浏览器。
解决:1可以修改 redirect_url 的值,修改成跳入自己app的scheme。
2如果无法修改 redirect_url 的话,只能在webView 加载时拦截连接进行替换。注意一点:自己app Scheme地址得和H5支付填写的域名保持一致。
如下:
if ([scheme hasPrefix:@"https://wxtenpaycom/"] && ![scheme hasSuffix:[NSString stringWithFormat:@"redirect_url=自己appscheme://"]]) {
decisionHandler(WKNavigationActionPolicyCancel); NSStringredirectUrl =nil;
if([schemecontainsString:@"redirect_url="]) {
NSRangeredirectRange = [schemerangeOfString:@"redirect_url"];
redirectUrl = [[schemesubstringToIndex:redirectRangelocation]stringByAppendingString:[NSStringstringWithFormat:@"自己appscheme://"]];
}else{
redirectUrl = [schemestringByAppendingString:[NSStringstringWithFormat:@"自己appscheme://"]];
}
NSMutableURLRequest newRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:redirectUrl] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];
newRequestallHTTPHeaderFields= navigationActionrequestallHTTPHeaderFields;
newRequestURL= [NSURLURLWithString:redirectUrl];
[webViewloadRequest:newRequest];
return;
}
如果返回app还得加载成功H5页面成功页面的话,可以保存或者拿到成功页面地址,进入app进行第二次加载。
在Android的html5页面中发起微信支付方法:首先申请公众号,申请开通支付,这个很简单,自行百度申请好之后 在微信公众平台页面的“微信支付”页面中的“开发配置”Tab上配置“支付授权目录”,“测试授权目录”,“测试白名单”在微信公众平台页面的“开发者中心”中找到“AppID(应用ID)”和“AppSecret(应用密钥)”在商户平台中找到微信支付分配的商户号,以及自己配置一个商户支付密钥
具体步骤:
首先通过微信支付的api 获得支付用的prepay_id,这里需要用到上面提到的“AppID(应用ID)”,“AppSecret(应用密钥)”,“微信支付分配的商户号”,“商户支付密钥”以及其他的一些参数(具体参照微信开发文档)用MD5加密成签名(第一次签名)获得prepay_id后,用prepay_id和一些其他参数(具体参照微信开发文档)用MD5加密成签名(第二次签名)然后在前端通过微信内置浏览器提供的js API,WeixinJSBridgeinvoke来调用微信支付的弹出页面,这里需要用到上面的第二次的签名
注:支付链接和在开发平台配置的链接不匹配,总共需要2次签名,并且所需的参数是不同的,在JS中用到的签名是第二次签名,不要混淆参数传递的不能有错。
备案域名cccom
此时在h5支付授权目录,配置域名为cccom,不要加www
则,该域名下的 testcccom可以正常调起微信支付
-------------------------
令:如果二级域名不能回调成功,使用原主域名回调可以
因为各种原因吧,我们在做移动端开发的时候,涉及到money,我们经常要做微信支付。如果是做小程序开发,我们可以直接用小程序的原生接口,一键搞定,如果是h5网页的话,那我们就需要使用微信提供的js-sdk了。
注:使用了jssdk不是所有的环境都可以调用微信来支付,它只是单纯的微信环境下支付,如果要想支持非微信浏览器内支付,需要开通微信h5支付功能,我们现在用的都是微信的JSAPI支付,而微信的h5支付是要求商户已有H5商城网站,并且已经过ICP备案。哈哈哈哈,是不是很惊讶!太坑了呀!
虽然坑,还得用,那咱就搞一下它。
首先,打开我们的微信公众平台,阅读一下网页开发的基本要求 https://developersweixinqqcom/doc/offiaccount/OA_Web_Apps/iOS_WKWebviewhtml
然后我们了解到,使用js-sdk,我们先要
然后呢,这里给你们讲一下,我们接下来要做的事情。
首先呢,我们要先要获得网页授权,然后我们跳转我们项目中的业务页面。
这里主要是appid和重定向页面,至于是否弹出授权页面(scope=snsapi_userinfo/snsapi_base )等等,根据你自己需求来。然后呢,我们通过这个来进入页面的时候,在当前你支付页面的url上会有授权后返回的code参数。
如果提示:调用支付jsapi缺少参数: 这是由于没拿到openid导致,可以把windowlocationhref 替换成window,locationreplace() ,这是因为微信网页授权会2次刷新页面,我们这样做能有效避免错误。
然后呢,我们定义一个方法
通过 let code = thisgetQueryString('code'),我们去调用后端提供的接口,来获取openId。我们的支付不需要我去另外获取openId了,同学们自行卑微的通过接口用code换取openId吧
要注意的是,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期 。
然后我们接下来就是我们真正进行支付操作的时刻了
到这里,我们的微信支付基本就是完成了其实整体做下来我们发现,无非是比把大象装冰箱里多两步而已
然后我们把我们封装的接口用起来
到此,一个完整的h5微信支付就完成了。下一次,我们把微信分享也添加进来。这样,一个我们常用的基于微信SDK的支付分享功能就被我们完成了。如果觉得对你有帮助的话,帮作者点个赞吧,码文不易,点一下支持支持!谢谢您嘞!
1、微信平台申请申请入口:登录微信商户平台-->产品中心-->我的产品-->支付产品-->H5支付 2、填写参数在微信支付平台成功申请到微信 H5 支付后,可以通过工单或 IM(标准版及以上版本)填写渠道参数。