判断微信浏览器调起支付宝是微信还是支付宝

6033人阅读
JavaScript(32)
移动端(9)
项目实例(21)
判断是否为微信浏览器或支付宝浏览器
if (/MicroMessenger/.test(window.navigator.userAgent)) {
alert('微信客户端');
} else if (/AlipayClient/.test(window.navigator.userAgent)) {
alert('支付宝客户端');
alert('其他浏览器');
访问:174785次
积分:2640
排名:第16109名
原创:101篇如何判断是微信内置浏览器或者支付宝内置浏览器
通过支付宝或者微信客户端扫描一个带链接地址的二维码会调用内置的浏览器打开该网页,有一些应用场景需要我们明确知道是哪个客户端打开的该链接。
php我们可以借用这个$_SERVER['HTTP_USER_AGENT']通过echo来输出浏览器信息
微信浏览器信息
支付宝浏览器信息
所以通过识别micromessenger或者alipay这样的关键字应该就可以判断内置浏览器类型。
微信浏览器
if(strpos($_SERVER['HTTP_USER_AGENT'],'MicroMessenger')!==false){
$browsertype="wei";
阿里云支付宝浏览器
if(strpos($_SERVER['HTTP_USER_AGENT'],'Alipay')!==false){
$browsertype="ali";
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。微信浏览器中进行支付宝支付
B端项目使用的是支付宝手机网页支付,微信中屏蔽了支付宝的功能。上有政策下有对策,支付宝也有应对的办法,下来就来说一说支付宝手机网站支付。
第一步:开发准备工作
登录支付宝平台(需要实名认证的支付宝账号),根据实际情况创建应用。
选择自用型应用,添加应用功能。
配置应用环境
支付宝中使用的是RSA2非对称密钥结构。
第二步:快速接入
下载服务端SDK(software Development Kit),包含了java、php、.net三个语言版本,封装了签名验签、http请求等功能。但是我们的项目中没有使用sdk,一般情况下sdk是用在原生的安卓和ios项目中,但是我们的项目使用的是混合式开发。
准备工作:支付宝给出了在微信浏览器中支付的解决方法,而且官网中有demo。
我下载了demo,其中有两个比较重要的文件,一个是ap.js,另一个是pay.htm(支付宝在微信浏览器中的引导页,会引导用户在浏览器中访问此链接),支付页面和pay.htm页面必须引入ap.js文件。
大概思路是前台点击支付宝支付,然后调起后台的拼装支付参数的方法,返回一个拼装好的url,将这个url在前台赋值给一个a标签,我写了一个自定义事件,为了触发a标签前去访问拼装好的链接。
注意:ap.js中有个地址要修改下。
修改为本地的路径。前台代码就是这些就可以调起支付宝了。
后台代码:
* 后台组装好请求数据,前台以form表单的形式向支付宝手机网页
* 支付接口发起请求
* @param saleMoney
* @param orderNumber
* @param order
* @param description
@RequestMapping(&/alipayPayRequest&)
@ApiOperation(value=&支付宝付款起调的接口&,httpMethod=&POST&,response=JsonUtil.class,notes=&支付宝付款起调的接口---/alipayPayRequest&)
public void alipayPayRequest(
@ApiParam(required=true,name=&orderNumber&,value=&订单编号&)@RequestParam(value=&orderNumber&) String orderNumber,
@ApiParam(required=true,name=&order&,value=&订单标题&)@RequestParam(value=&order&) String order,
@ApiParam(required=true,name=&description&,value=&订单描述&)@RequestParam(value=&description&) String description){
if(orderNumber !=null && !orderNumber.equals(&&)
&& order !=null && !order.equals(&&)
&& description !=null && !description.equals(&&)
OrderCommCai orderCommCai = orderCommCaiService.get(orderNumber);//根据综合采购单id来查找综合采购单
String saleMoney = orderCommCai.getOrderZongCommPrices().toString();
// 公共请求参数
Map param = new HashMap&&();
param.put(&app_id&, AlipayConfig.appId);
// 应用appId
param.put(&method&, &alipay.trade.wap.pay&); // 接口名称
param.put(&format&, &json&); //数据类型
param.put(&charset&, AlipayConfig.input_charset);//编码格式
param.put(&timestamp&, DatetimeUtil.formatDateTime(new Date()));//发送请求时间
param.put(&version&, &1.0&);//调用接口版本,固定为1.0
param.put(&notify_url&, AlipayConfig.notify_url);// 支付宝服务器主动通知商户服务
param.put(&sign_type&, AlipayConfig.sign_type);//签名类型
// 支付业务请求参数
Map pcont = new HashMap&&();
pcont.put(&out_trade_no&, orderNumber);// 订单号(综合采购单编号)
pcont.put(&total_amount&, String.valueOf(saleMoney));// 交易金额
pcont.put(&subject&, order); // 订单标题
pcont.put(&body&, description); // 对交易或商品的描述
pcont.put(&product_code&, &QUICK_WAP_WAY&);
// 销售产品码
param.put(&biz_content&, JSON.toJSONString(pcont));
// 业务请求参数
不需要对json字符串转义
param.put(&return_url&, AlipayConfig.RETURN_URL);
Map payMap = new HashMap&&();
param.put(&sign&, PayUtil.getSign(param, AlipayConfig.private_key)); //业务请求参数
payMap.put(&orderStr&, PayUtil.getSignEncodeUrl(param, true));//拼接好的url
} catch (Exception e) {
e.printStackTrace();
map1.put(&msg&, &成功&);
map2.put(&result&, payMap);
map1.put(&msg&, &参数不全&);
} catch (BusinessException e) {
e.printStackTrace();
map1.put(&msg&, &发生后台异常&);
map.put(&data&, map2);
map.put(&result&, map1);
JsonUtil.writeJson(response, JsonUtil.objectToJson(map));
代码逻辑:
将公共参数放进map集合中,然后将请求参数放进另一个map1集合中。将map1转换为json字符串,然后将map1放进map中去,键值为biz_content,然后对参数进行签名,将签名后得到的字符串放进map集合中,键值是sign,将map集合进行urlEncode,返回的就是拼接好的支付链接.
混合式开发基本都是这种写法,只是参数的值可能会有变动。
请求参数说明:
公共请求参数,根据自己的情况来选择参数,有的是必填,有的是非必填。我在代码中主要用的是必填的参数。
app_id:支付宝分配给开发者的应用id
method:接口名称
charset:请求使用的编码格式
sign_type:算法生成签名字符串使用的签名算法类型目前支持RSA和RSA2
sign:商户请求参数的签名串
timestamp:发送请求的时间,格式yyyy-MM-dd HH:mm:ss
version:调用接口版本,固定为1.0
notify_url:支付宝服务器主动通知商户服务器里指定的页面http/https路径
return_url:支付成功后跳转的页面
biz_content:业务请求参数集合,最大长度不限,除公共参数外所有请求参数必须放在这个参数中传递。
请求参数:
subject:商品标题、交易标题、订单标题、订单关键字等
out_trade_no:商户网站唯一订单号
total_amount:订单金额,单位为元,精确到小数点后两位
product_code:销售产品码,商家和支付宝签约的产品码。填写固定值QUICK_WAP_WAY15241人阅读
公众号开发(6)
通过支付宝或者微信客户端扫描一个带链接地址的二维码会调用内置的浏览器打开该网页,有一些应用场景需要我们明确知道是哪个客户端打开的该链接。下面是我测试的方法。
搭建测试网页
用jsp+tomcat部署了一个简单的测试页面,原理是需要获取内置浏览器的User Agent。代码如下:
&%@ page language="java" contentType="text/ charset=UTF-8"
pageEncoding="UTF-8"%&
&!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&
http-equiv="Content-Type" content="text/ charset=UTF-8"&
&扫码通知页面&
String tips = "扫码通知页面";
out.println(tips);
请求方法名:&%= request.getMethod() %&/&
客户端信息:&%= request.getHeader("user-agent") %&/&
生成二维码
用百度自带的二维码生成工具输入网址直接生成二维码:
注意:我这个测试网址是部署到公司内网上的,所以大家不用扫了肯定打不开 哈哈。
然后分别用微信扫一扫和支付宝扫一扫,打开链接:
所以通过识别micromessenger或者aplipay这样的关键字应该就可以判断内置浏览器类型。
访问:1634920次
积分:13639
排名:第1107名
原创:262篇
转载:60篇
译文:10篇
评论:373条
交流可在文章评论或发邮件至:pony_微信号:pony_maggie
文章:25篇
阅读:41222
文章:28篇
阅读:87696
文章:25篇
阅读:283224
文章:39篇
阅读:204860
文章:10篇
阅读:244004
(1)(4)(1)(1)(7)(6)(7)(1)(5)(6)(1)(7)(2)(5)(7)(8)(14)(8)(1)(2)(1)(3)(1)(3)(1)(4)(2)(3)(6)(15)(21)(1)(3)(6)(4)(11)(12)(9)(14)(5)(1)(1)(3)(3)(1)(1)(1)(2)(3)(2)(3)(4)(2)(1)(1)(2)(3)(2)(5)(1)(2)(3)(2)(3)(2)(7)(6)(46)判断客户端是微信,还是支付宝_百度知道
判断客户端是微信,还是支付宝
我有更好的答案
如果你说的是收款码,微信收款码中间有一个绿色对号,支付宝收款码没有
采纳率:92%
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 微信浏览器支付宝支付 的文章

 

随机推荐