微信公众号中调用支付宝手机网站支付

    在阿里官网中有解决微信公众号中调用支付宝手机网站支付的方案,就是使用官方提供的ap.js和pay.html,当然,阿里也给了get和post相关的例子:
这里写图片描述

    我们以demo_post.htm为例:
这里写图片描述
    可以看到script中处理了各个参数,但是这种方式后端不能使用平台提供的SDK完成签名,因为SDK签名会生成form表单,因此各个参数需要自己写代码完成拼接和签名。需要注意的是:手动签名极可能出现问题!

    我推荐使用SDK完成签名(官网上的demo可以原封不动),然后修改demo_post.htm文件可以实现微信公众号中用本地浏览器打开支付宝。
这里写图片描述
(图片中的alipayForm是个div)

obj.alipay=function(){
	qmpur.ajax({
		url:qmpur.Configs.userBasePath+"/common/pay",
		data: {
			orderNo: orderNo,
			payMethod:2,
			orderType:2,
			token:qmpur.Configs.token
		},
		dataType: 'json',
		type: 'post',
		headers: {
			'Content-Type': 'application/json;charset=utf-8'
		},
		success: function(data) {
			var form = data.requestForm  
	        $("#alipayForm").append(form);
	        $("#alipayForm script").remove(); 
	        var queryParam = '';
	        Array.prototype.slice.call(document.querySelectorAll("input[type=hidden]")).forEach(function (ele) {
	            queryParam += ele.name + "=" + encodeURIComponent(ele.value) + '&';
	        });
	        var url = document.getElementsByName("punchout_form")[0].action+'&'+queryParam;
	        _AP.pay(url); 
		},
		error: function(xhr, type, errorThrown) {
			mui.alert(i18n_com_pay_fail, i18n_com_warn);
		}
	});
};

    公众号其实可以看成是微信的内置浏览器,你可以引导用户选择右上角的选项(三个点),然后选择用本地浏览器打开,注意支付宝回调时授权的问题。

    感谢某个路人给我提供思路~

### 实现微信公众号跳转至支付宝支付 在当前的技术框架下,直接从微信公众号环境内部实现自动跳转到支付宝进行支付并非官方推荐的方式。这是因为微信公众平台的安全策略以及生态封闭性决定了其对于外部链接尤其是涉及资金交易的操作有着严格的管控措施[^1]。 然而,在实际业务场景中如果确实存在这样的需求,则可以考虑采用间接方案来达成目的: #### 方案概述 当用户处于微信公众号的文章或菜单引导下的H5页面时,触发购买行为后不立即尝试调用任何支付手段而是先收集必要的订单信息并将之提交给服务器端保存起来形成预订单状态。此时服务端会返回一个唯一标识该笔潜在交易的信息(如`out_trade_no`)。接着前端利用这个编号构建一个新的URL指向开发者自己搭建的服务站点上的特定路径——此路径专门用于处理来自微信渠道发起但由其他方式完成结算的情况。 在这个自定义的中间页上加载完成后,依据之前传递过来的数据向支付宝开放平台发送请求创建一笔新的待付款记录,并获取可用于展示给用户的支付连接或者二维码图片等内容形式之一作为响应结果的一部分呈现出来供最终消费者确认执行下一步动作即打开手机中的支付宝客户端扫描上述生成物从而真正意义上启动整个流程直至结束。 ```javascript // 前端部分伪代码示意 async function redirectToAlipayPayment(orderId) { const response = await fetch(`/api/orders/${orderId}/prepare-alipay`, { method: 'POST' }); const data = await response.json(); if (data.success && data.alipayUrl) { window.location.href = data.alipayUrl; } else { console.error('Failed to prepare Alipay payment:', data.message); } } ``` 需要注意的是由于涉及到跨域访问问题所以在设计API接口的时候要特别留意CORS相关政策设置确保前后两端能够正常通信交互[^2]。 另外在整个过程中为了保障用户体验流畅度建议尽可能缩短各环节之间的等待时间同时也要做好异常情况下的提示说明工作以便于及时解决问题减少不必要的投诉纠纷发生几率。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值