WeChat Sweep呼び出しの失敗したソリューション
11877 ワード
実際のプロジェクトでは、ビジネスは微信の公衆番号を開発する必要があります.ビジネスシーンでは、微信を使ってスキャンする必要があります.奇妙な問題が発生しました.初めてページに入ったときに呼び出すのに成功しました.
微信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には何のパラメータもつなぎ合わせていないので、このときに微信スキャンを呼び出すのは成功して問題ありません.
奇妙な問題は別の操作として発生した後、呼び出し微信スキャンをクリックしてみると、どうやっても呼び出せないことに気づいた.なぜなら、要求URLに他のパラメータが接続されているため、微信が私のURLを解析する解析に失敗した.微信側のインタフェース値を呼び出すと、微信は私たちのURLに他のパラメータを接続しなければならないからだ.そこで,ここでは,微信スキャンを呼び出す際にURLがパラメータをつなぎ合わせることを許さないことが分かった.
本人の解決策はリフレッシュボタンのリダイレクトURLを追加して、このように微信スキャンを呼び出すと成功します.
更新後にリダイレクトしたURLをクリック
完全なjsp
バックグラウンドリフレッシュ後のリダイレクトURLメソッド
微信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には何のパラメータもつなぎ合わせていないので、このときに微信スキャンを呼び出すのは成功して問題ありません.
奇妙な問題は別の操作として発生した後、呼び出し微信スキャンをクリックしてみると、どうやっても呼び出せないことに気づいた.なぜなら、要求URLに他のパラメータが接続されているため、微信が私のURLを解析する解析に失敗した.微信側のインタフェース値を呼び出すと、微信は私たちのURLに他のパラメータを接続しなければならないからだ.そこで,ここでは,微信スキャンを呼び出す際にURLがパラメータをつなぎ合わせることを許さないことが分かった.
本人の解決策はリフレッシュボタンのリダイレクトURLを追加して、このように微信スキャンを呼び出すと成功します.
更新後にリダイレクトしたURLをクリック
完全な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/
}