① 微信小程序支付成功後沒有回調函數返回。
看不太懂……我用java寫過……,小程序支付,統一下單的過程有嗎?當時測試時,我是將接收的xml寫入到指定的路勁,然後在伺服器的該路徑下找到txt文檔來驗證的
② 怎麼用java調用微信支付介面
1.調用微信介面授權
授權這里有兩種方式,一種是snsapi_bases,另一種是snsapi_userinfo,這里官方文檔介紹的比較清楚,可以參考官網
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN
appid登錄微信公眾號-基本配置-開發者ID-APPID
redirect_uri就是一個回調地址,當你調用完微信的這個鏈接後,他會自動調用你定義的這個地址,返回code參數
注意,redirect_uri也需要在公眾號裡面配置,在介面許可權-網頁帳號里修改。
2.可以在頁面中寫一個調用授權的頁面
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""
<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<title>用戶管理</title>
<scripttype="text/javascript"src="js/jquery/jquery-1.11.1.min.js"></script>
<scripttype="text/javascript">
functionoauth(){
varurl="<%=basePath%>getOauth2Url";
$.ajax({
url:url,
success:function(result){
//varresult=eval('('+result+')');
if(result.success){
location.href=result.obj;//
}else{
}
}
});
}
</script>
</head>
<body>
<ponclick="oauth()">非用戶認證鑒權</p>
</body>
</html>
</pre><preclass="html"name="code"snippet_file_name="blog_20160608_3_8825275"code_snippet_id="1711669">java中的方法
<preclass="html"name="code">/**
*獲取授權地址
*@return
*/
@RequestMapping(value="/getOauth2Url",method=RequestMethod.GET)
publicvoidgetOauth2Url(Modelmodel,HttpServletResponseresponse){
Jsonj=newJson();
try{
Stringauthorize_url=PayConfig.AUTHORIZE_URL;
StringappId=PayConfig.APPID;
Stringredirect_uri=PayConfig.REDIRECT_URI;
Stringurl=authorize_url+"?appid="+appId+"&redirect_uri="+urlEncodeUTF8(redirect_uri)+"&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";
System.out.println(url);
j.setSuccess(true);
j.setMsg("保存成功!");
j.setObj(url);
write(response,JSON.toJSONString(j));
}catch(Exceptione){
j.setMsg(e.getMessage());
}
}
/**
*對回調地址進行encode
*@paramsource
*@return
*/
(Stringsource){
Stringresult=source;
try{
result=java.net.URLEncoder.encode(source,"utf-8");
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}
returnresult;
}
<preclass="html"name="code"> /**
*獲取授權地址
*@return
*/
@RequestMapping(value="/getOauth2Url",method=RequestMethod.GET)
publicvoidgetOauth2Url(Modelmodel,HttpServletResponseresponse){
Jsonj=newJson();
try{
Stringauthorize_url=PayConfig.AUTHORIZE_URL;
StringappId=PayConfig.APPID;
Stringredirect_uri=PayConfig.REDIRECT_URI;
Stringurl=authorize_url+"?appid="+appId+"&redirect_uri="+urlEncodeUTF8(redirect_uri)+"&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";
System.out.println(url);
j.setSuccess(true);
j.setMsg("保存成功!");
j.setObj(url);
write(response,JSON.toJSONString(j));
}catch(Exceptione){
j.setMsg(e.getMessage());
}
}
/**
*對回調地址進行encode
*@paramsource
*@return
*/
(Stringsource){
Stringresult=source;
try{
result=java.net.URLEncoder.encode(source,"utf-8");
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}
returnresult;
}
packagecom.crm.common;
publicclassPayConfig{
publicstaticStringAPPID="wx91af774aae000dcb";//APPID
publicstaticStringMCHID="1347742701";//商戶編號
publicstaticStringPAYKEY="";//支付密鑰
publicstaticStringAPPSECRET="";//公眾號-基本配置-APPSECRET密鑰
publicstaticStringREDIRECT_URI="
回調地址
publicstaticStringAUTHORIZE_URL="
微信授權地址
publicstaticStringACCESS_TOKEN_URI="
publicstaticStringSCOPE="snsapi_base";//snsapi_base和snsapi_userinfo
publicstaticStringGRANT_TYPE="grant_type";//獲取openid時用,不用改
}
3.成功後,回到你當時寫的回調地址
<preclass="html"name="code">/**
*微信授權後的回調地址的方法
*@paramcode
*@paramresponse
*/
@RequestMapping(value="/authorize",method=RequestMethod.GET)
publicvoidauthorize(Stringcode,HttpServletResponseresponse,Stringopenid){
code="test";
Stringaccess_token_uri=PayConfig.ACCESS_TOKEN_URI;
Stringappid=PayConfig.APPID;
Stringsecret=PayConfig.APPSECRET;
access_token_uri=access_token_uri.replace("APPID",appid).replace("SECRET",secret).replace("CODE",code);
System.out.println(access_token_uri);
if(openid!=null){
UniteOrderorder=getUniteOrder(openid);
StringreqXML=PayImpl.generateXML(order,PayConfig.PAYKEY);
StringrespXML=PayImpl.requestWechat(ORDER_URL,reqXML);
System.out.println("respXML="+respXML);
UniteOrderResultresult=(UniteOrderResult)PayImpl.turnObject(UniteOrderResult.class,respXML);
getWechatPay(result);
}
}
③ 用Java怎麼實現微信支付
具體方法步驟:
一、准備階段:已認證微信號,且通過微信支付認證,這個可以看微信文檔,很詳細,這里就不再重復。
④ 微信支付成功後返回postData xml 用戶信息java怎麼獲取
java有dom4j 去解析xml。
publicstaticMap<String,String>parseXml(HttpServletRequestrequest)
throwsException{
//解析結果存儲在HashMap
Map<String,String>map=newHashMap<String,String>();
InputStreaminputStream=request.getInputStream();
//讀取輸入流
SAXReaderreader=newSAXReader();
Documentdocument=reader.read(inputStream);
//得到xml根元素
Elementroot=document.getRootElement();
//得到根元素的所有子節點
List<Element>elementList=root.elements();
//遍歷所有子節點
for(Elemente:elementList)
map.put(e.getName(),e.getText());
//釋放資源
inputStream.close();
inputStream=null;
returnmap;
}
後面取值不用我寫了把。Map類型
⑤ 用Java怎麼實現微信支付
具體方法步驟:
一、准備階段:已認證微信號,且通過微信支付認證,這個可以看微信文檔,很詳細,這里就不再重復。