WeChat Sweep呼び出しの失敗したソリューション


実際のプロジェクトでは、ビジネスは微信の公衆番号を開発する必要があります.ビジネスシーンでは、微信を使ってスキャンする必要があります.奇妙な問題が発生しました.初めてページに入ったときに呼び出すのに成功しました.
微信JS-SDK説明ドキュメント公式サイト
http://caibaojian.com/wxwiki/0030551f015f01ecaa56d20b88ee3c6cb32503bf.html#JSSDK.E4.BD.BF.E7.94.A8.E6.AD.A5.E9.AA.A4
WeChat JS-SDK説明ドキュメントの公式サイトで長い間探しても私と同じケースはありませんでしたが、複数のテストの後にURLの問題であることに気づき、呼び出しWeChatスキャン呼び出しが起きなくなりました.以下、私の例で状況を説明します.
 
初めてページに入ったとき、スキャンをクリックして印刷したURLには何のパラメータもつなぎ合わせていないので、このときに微信スキャンを呼び出すのは成功して問題ありません.
微信扫一扫调用失败解决方案_第1张图片
奇妙な問題は別の操作として発生した後、呼び出し微信スキャンをクリックしてみると、どうやっても呼び出せないことに気づいた.なぜなら、要求URLに他のパラメータが接続されているため、微信が私のURLを解析する解析に失敗した.微信側のインタフェース値を呼び出すと、微信は私たちのURLに他のパラメータを接続しなければならないからだ.そこで,ここでは,微信スキャンを呼び出す際にURLがパラメータをつなぎ合わせることを許さないことが分かった.
微信扫一扫调用失败解决方案_第2张图片
 
本人の解決策はリフレッシュボタンのリダイレクトURLを追加して、このように微信スキャンを呼び出すと成功します.
更新後にリダイレクトしたURLをクリック
微信扫一扫调用失败解决方案_第3张图片
 
完全なjsp


 --%>



    







	
             

コードのスキャン        げの    
${m.skusysno } ${m.skuname} ${m.groupname3} ${m.groupname1} ${m.umqty}

${m.skusysno }  ${m.skuname}  ${m.groupname3}  ${m.groupname1}   :${m.umqty}

--%>

$(document).ready(function () { var timestamps = parseInt('${timestamp}');// String , var nonceStrs = '${nonceStr}'; var signatures = '${signature}'; wx.config({ debug: false, // , api alert , , pc , log , pc 。 appId: ' ', // , timestamp: timestamps, // , nonceStr: nonceStrs, // , signature:signatures, // , jsApiList: ['scanQRCode'] // , JS , }); // $(".test").click(function () { /* var ua = navigator.userAgent.toLowerCase(); var isWeixin = ua.indexOf('micromessenger') !== -1; if (!isWeixin) { alert(' , '); } */ alert(location.href.split('#')[0]); wx.scanQRCode({ needResult: 1, // 0, ,1 , scanType: ["qrCode","barCode"], // , success: function (res) { // , (res.resultStr ) // location.href = res.resultStr; var ruKeSysno = res.resultStr; // $("#ruKeSysno").val(ruKeSysno); $("#isshuaxin").val("2"); $("#forms").submit(); }, error: function (res) { alert(JSON.stringify(res)); if (res.errMsg.indexOf('function_not_exist') > 0) { alert(' , '); } } }); }); }); function shuaxin(){ // var url = "<%=basePath%>/rest/UpperShelf/doconfig"; $("#forms").attr("action",url); $("#forms").submit(); }

 
 
バックグラウンドリフレッシュ後のリダイレクトURLメソッド
package com.szerp.wechat.contoller.cangku;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.jeecgframework.core.common.exception.BusinessException;
import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
import org.jeecgframework.core.common.model.json.DataGrid;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.web.system.service.SystemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.alibaba.fastjson.JSONObject;
import com.szerp.wechat.util.CurrencyUtil;
import com.szerp.wechat.util.Sign;
import com.szerp.wechat.util.TokenUtil;
import com.szerp.wmstask.entity.LWmsTaskdetailsEntity;
import com.szerp.wmstask.service.LWmsTasksServiceI;
import com.szerp.wmstask.service.ReceiptTask;

import net.sf.json.JSONArray;

/**
 *          ;
 * 
 * @author zhanguoqiang
 * @date 2020-02-17
 * 
 */
@Scope("prototype")
@Controller			
@RequestMapping("/UpperShelf")
public class UpperShelfController{
    @Autowired
    private LWmsTasksServiceI lWmsTasksService;
    @Autowired
    private ReceiptTask receiptTaskImpl;
	@Autowired
	private SystemService systemService;
	
	@Autowired
	@Qualifier("sessionFactory")
	private SessionFactory sessionFactory;

	private static final Logger logger = Logger.getLogger(UpperShelfController.class); //    
	private String message; //         

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
	
	public Session getSession()
	  {
	     return sessionFactory.getCurrentSession();
	  }
	
	  private static Properties properties = new Properties();
	

	

	
	

	

	
	
	
	
	/**
	 *           HttpServletRequest       
	 * @param request
	 */
	
	public void setRequest(HttpServletRequest request){
		// 1.  token
		TokenUtil tokenutil=new TokenUtil();
        String access_token = tokenutil.seekToken(request);
		//String access_token = null;
		String apiticket = null;
		try {
			// jsapi_ticket、noncestr、timestamp、url  ,  SHA1    ,      
		     if (access_token == null) {
					String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
							+ "   ID" + "&secret=" + "     ";
					JSONObject jsonStrToken = CurrencyUtil.doGetStr(url) ;
					access_token = jsonStrToken.getString("access_token");
				}

				if (null == apiticket) {
					String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="
							+ access_token + "&type=jsapi";
					JSONObject jsonStrTicket = CurrencyUtil.doGetStr(url);
					apiticket = jsonStrTicket.getString("ticket");
				} 
				String url = request.getRequestURL().toString();
				String	jsapi_ticket = apiticket;
				Map  signMap = Sign.sign( jsapi_ticket,  url);
				request.setAttribute("timestamp", signMap.get("timestamp"));
				request.setAttribute("nonceStr", signMap.get("nonceStr"));
				request.setAttribute("signature", signMap.get("signature"));
		} catch (Exception e) {
			e.printStackTrace();
			logger.info("request    :"+e.getMessage());
		}
		
	}
	
	 // 
	@RequestMapping(value = "doconfig")
	public ModelAndView doconfig(HttpServletRequest request, HttpServletResponse response) {
		try {
			/**
			 *           HttpServletRequest       
			 * @param request
			 */
			this.setRequest(request);
			Properties prop = PropertiesLoaderUtils.loadProperties(new ClassPathResource("sysConfig.properties"));
			String local = prop.getProperty("local");
			String site="";
			//  
			if("1".equals(local)){
				String wechatLocalUrl = prop.getProperty("wechatLocalUrl");
				site = new String(wechatLocalUrl+"UpperShelf/doSaoMa");
			}else if("2".equals(local)){//  
				String wechatUrl = prop.getProperty("wechatUrl");
				site = new String(wechatUrl+"UpperShelf/doSaoMa");
			}
		   //        
		   response.setStatus(response.SC_MOVED_TEMPORARILY);
		   response.setHeader("Location", site); 	
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("        " + e.getMessage());
		}

		return new ModelAndView("WeChat/upperShelf/upperShelfList");
	}
	
	#   1     2
local=1
#wechat   
wechatLocalUrl=http://localhost:8080/   /rest/
wechatUrl=https://     /rest/
	
}