关于微信支付(H5获取openid)

打开电脑,脑袋里把最近做的需求过了一遍,让我最吃足苦头的还是微信支付,不是说有多难,而是坑太多,防不胜防,具体遇到的坑后续总结后再一并更新。
第一次做微信开发,第一次做微信支付,没办法,硬着头皮来,边看文档边思考整个逻辑,等到整个流程过了一遍后,就开始着手撸代码了。

####Config参数配置(配置成功可略过此步)

<?php
	error_reporting(E_ALL || ~E_NOTICE);
	header("Content-type:text/html; charset=utf-8");
	require_once "sdk/jssdk.php";
	$jssdk = new JSSDK(appId, 密钥);
	$signPackage = $jssdk->GetSignPackage();
?>

//通过config接口注入权限验证配置
wx.config({
    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '<?php echo $signPackage["appId"];?>',
 	timestamp: '<?php echo $signPackage["timestamp"];?>',
    nonceStr: '<?php echo $signPackage["nonceStr"];?>',
    signature: '<?php echo $signPackage["signature"];?>',
    jsApiList: ['getBrandWCPayRequest'] // 必填,需要使用的JS接口列表
});	
建议debug开启调试模式,config配置提示成功后,开始进入主题。

####网页授权获取openid
由于微信支付需要用户openid,而获取openid则需要进行网页授权,将获取到的openid存入cookie中,避免每次请求都要进行一次授权来获取openid。
1.授权用静默授权即可,首先获取code
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE

2.获取code后,请求以下链接获取access_token: 
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
请求成功后,返回的数据中可获得openid,进而可进行下一步的支付。

微信支付关键点是要获取到openid。

以下为代码实现:

		$(function(){
			var openId="";
			var code="";		
			//获取openId
			openId=getcookie('openId'); 
			_code = getQueryString('code');
			if (openId==null){
				if(_code==null){
					var fromurl = location.href;			
					var url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=公众号ID&redirect_uri="+encodeURIComponent(fromurl)+"&response_type=code&scope=snsapi_base&state=123#wechat_redirect";   
					window.location.href=url;
				}else{
					$.ajax({     
						url: serverUrl+"api/webpay.openid?_v=1.3.4&code="+_code, 
						type: "get",
	                    async:false,  
	                    cache:false, 						
						dataType:'json',
						success: function (result) {
							if (result.data != null && result.data.hasOwnProperty('openid') && result.data.openid !=""){  
								openId = result.data.openid;
								addcookie("openId",openId,36000);	
								//进行支付逻辑...		
															
                            }else{  
                              location.href(fromurl);  
                            } 
						}
						
					}); 						
				}
			}else{
				openId = getcookie('openId'); 	
				//进行支付逻辑...			
			}
		})		
		
		//获取code参数
		function getQueryString(name) {
			var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
			var r = window.location.search.substr(1).match(reg);
			if (r != null) {
				return unescape(r[2]);
			 }
			return null; 
		}
		
		function addcookie(name,value,expireHours){  
			var cookieString=name+"="+escape(value)+"; path=/";  
			//判断是否设置过期时间  
			if(expireHours>0){  
				var date=new Date();  
				date.setTime(date.getTime+expireHours*3600*1000);  
				cookieString=cookieString+"; expire="+date.toGMTString();  
			}  
			document.cookie=cookieString;  
		}  
		  
		function getcookie(name){  
			var strcookie=document.cookie;  
			var arrcookie=strcookie.split("; ");  
			for(var i=0;i<arrcookie.length;i++){  
			var arr=arrcookie[i].split("=");  
			if(arr[0]==name)return decodeURIComponent(arr[1]); 
			}  
			return null;  
		}  
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在微信支付获取用户的openid,您需要进行以下步骤: 1. 首先,您需要在微信公众平台设置获取openid的域名。只有被设置过的域名才是有效的获取openid的域名。如果没有设置过域名,获取openid的操作将会失败。\[2\] 2. 在您的开发中,您需要使用统一下单接口来进行支付。在统一下单接口中,需要传递用户的openid作为参数。\[2\] 3. 要获取用户的openid,您可以通过以下步骤: - 用户在微信客户端中打开您的网页或应用程序。 - 您需要在网页或应用程序中生成一个授权链接,链接中包含您的公众号的appid、secret和一个code参数。 - 用户点击授权链接后,会跳转到微信的授权页面,用户需要确认授权。 - 授权成功后,微信会将一个code参数返回给您的网页或应用程序。 - 您可以使用这个code参数,通过调用微信的接口来获取用户的openid。\[3\] 请注意,以上步骤仅适用于JSAPI支付方式。对于其他支付方式,例如扫码支付和非微信内置浏览器H5支付,可能会有不同的获取openid的方式。如果您对其他支付方式的获取openid有疑问,可以进一步咨询微信支付的官方文档或联系微信支付的技术支持。 #### 引用[.reference_title] - *1* [微信公众号支付 (一、获取openId)](https://blog.csdn.net/weixin_38941916/article/details/78013090)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [微信公众号支付--1--获取openid](https://blog.csdn.net/hjfcgt123/article/details/104172909)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值