㈠ 多個域名如何使用同一個微信支付賬號
同一個微信支付帳號能夠使用在多個域名下,原因如下:
微信支付賬號和域名沒關系。是跟微信公眾號有關系,只要能支付出去,你願意綁幾個域名就綁定幾個域名。
㈡ 微信H5支付流程
1、用戶在商戶側完成下單,使用微信支付進行支付
2、由商戶後台向微信支付發起下單請求( 調用統一下單介面 )註:交易類型trade_type=MWEB
3、統一下單介面返回支付相關參數給商戶後台,如支付跳轉url(參數名「mweb_url」),商戶通過mweb_url調起微信支付中間頁
4、中間頁進行H5許可權的校驗,安全性檢查(此處常見錯誤請見下文)
5、如支付成功,商戶後台會接收到微信側的非同步通知
6、用戶在微信支付收銀台完成支付或取消支付,返回商戶頁面(默認為返回支付發起頁面)
7、商戶在展示頁面,引導用戶主動發起支付結果的查詢
8,9、商戶後台判斷是否接收到微信側的支付結果通知,如沒有,後台調用我們的 訂單查詢介面 確認訂單狀態(查單實現可參考: 支付回調和查單實現指引 )
10、展示最終的訂單支付結果給用戶
常見問題
一、回調頁面
正常流程用戶支付完成後會返回至發起支付的頁面,如需返回至指定頁面,則可以在MWEB_URL後拼接上redirect_url參數,來指定回調頁面。
如,您希望用戶支付完成後跳轉至 https://www.wechatpay.com.cn ,則可以做如下處理:
假設您通過統一下單介面獲到的MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=&package=1037687096
則拼接後的地址為MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn
注意:
1.需對redirect_url進行urlencode處理
2.由於設置redirect_url後,回跳指定頁面的操作可能發生在:
a、微信支付中間頁調起微信收銀台後超過5秒
b、用戶點擊「取消支付」或支付完成後點擊「完成」按鈕。因此無法保證頁面回跳時,支付流程已結束,所以商戶設置的redirect_url地址不能自動執行查單操作,應讓用戶去點擊按鈕觸發查單操作。回跳頁面展示效果可參考下圖
二、其它常見錯誤
| 網路環境未能通過安全驗證,請稍後再試 | 1. 商戶側統一下單傳的終端IP(spbill_create_ip)與用戶實際調起支付時微信側檢測到的終端IP不一致導致的,這個問題一般是商戶在統一下單時沒有傳遞正確的終端IP到spbill_create_ip導致,詳細可參見 客戶端ip獲取指引
2. 統一下單與調起支付時的網路有變動,如統一下單時是WIFI網路,下單成功後切換成4G網路再調起支付,這樣可能會引發我們的正常攔截,請保持網路環境一致的情況下重新發起支付流程
|
| 2 |
| 商家參數格式有誤,請聯系商家解決 |
1. 當前調起H5支付的referer為空導致,一般是因為直接訪問頁面調起H5支付,請按正常流程進行頁面跳轉後發起支付,或自行抓包確認referer值是否為空
2. 如果是APP里調起H5支付,需要在webview中手動設置referer,如(
Map<string> extraHeaders = new HashMap<string>();
extraHeaders.put("Referer", "商戶申請H5時提交的授權域名");//例如 http://www..com )</string></string>
|
| 3 |
| 商家存在未配置的參數,請聯系商家解決 | 1,當前調起H5支付的域名(微信側從referer中獲取)與申請H5支付時提交的授權域名不一致,如需添加或修改授權域名,請登錄商戶號對應的【商戶平台->產品中心->開發配置】自行配置
2,如果設置了回跳地址redirect_url,請確認設置的回跳地址的域名與申請H5支付時提交的授權域名是否一致 |
| 4 |
| 支付請求已失效,請重新發起支付 | 統一下單返回的MWEB_URL生成後,有效期為5分鍾,如超時請重新生成MWEB_URL後再發起支付 |
| 5 |
| 請在微信外打開訂單,進行支付 | H5支付不能直接在微信客戶端內調起,請在外部瀏覽器調起 |
| 6 |
| IOS:簽名驗證失敗
安卓:系統繁忙,請稍後再試 | 1,請確認同一個MWEB_URL只被一個微信號調起,如果不同微信號調起請重新下單生成新的MWEB_URL
2,如MWEB_URL有添加redirect_url,請確認參數拼接格式是否有誤,是否有對redirect_url的值做urlencode,可對比以下例子格式:
https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn |
|
|
| 7 |
| 由於商家傳入的H5交易參數有誤,該筆交易暫時無法完成,請聯系商家解決 | 統一下單中 spbill_create_ip 欄位必須為客戶端IP地址 |
三、QA
Q1:
1、傳遞redirect_url safari瀏覽器時支付完成後會新開一個頁面;
2、還有就是有些ios手機使用其他瀏覽器支付完成後默認會回到safari瀏覽器。
A1:
1、目前邏輯就是這樣設計的,防止商戶無限循環調用微信客戶端
2、對的,返回需要瀏覽器的schema信息,部分瀏覽器隱藏了這個信息,在無法拿到schema信息的情況下,就會回到safari瀏覽器
㈢ 開發微信h5支付需要驗證域名,域名怎麼申請域名具體是什麼
域名,就是一個網站的鏈接
申請,有阿里雲,騰訊伺服器,等。。
錢不多,稍微麻煩點,備案域名,你要購買一個域名,幾十塊錢;接著你備案好後在區H5那裡綁定一下就可以了
㈣ 微信支付回調域名是幹嘛的
微信支付回調通知出口域名的是什麼,用於券商伺服器配置白名單出口域名,不是ip
微信支付是騰訊公司開發的應用程序微信內置的支付產品,於2014年9月26日推出,為中國最主要的移動支付平台之一。
微信支付以綁定銀行卡的快捷支付為基礎,向用戶提供提供線下支付、web支付、公眾號支付、繳稅、轉賬等功能。
2022年2月22日,微信支付發布公告表示,2022年3月1日之後,個人收款碼可以繼續使用
㈤ 微信公眾帳號支付時域名是什麼URL是什麼意思
親,微信的公眾平台域名是mp.weixin.qq.com,至於URL意思就是統一資源定位符URL,
統一資源定位符 URL 是對可以從網際網路上得到的資源的位置和訪問方法的一種簡潔的表示。
URL 給資源的位置提供一種抽象的識別方法,並用這種方法給資源定位。統一資源定位符
只要能夠對資源定位,系統就可以對資源進行各種操作,如存取、更新、替換和查找其屬性。
URL 相當於一個文件名在網路范圍的擴展。因此 URL 是與網際網路相連的機器上的任何可訪問對象的一個指針。
在網際網路的歷史上,統一資源定位符的發明是一個非常基礎的步驟。統一資源定位符的語法是一般的,可擴展的,它使用ASCII代碼的一部分來表示網際網路的地址。一般統一資源定位符的開始標志著一個計算機網路所使用的網路協議。
㈥ 為什麼支付寶和微信支付都顯示Ip地址異常
建議分別通支付寶和微信的官方客服渠道咨詢。
溫馨提示:以上內容僅供參考。
應答時間:2021-08-31,最新業務變化請以平安銀行官網公布為准。
[平安銀行我知道]想要知道更多?快來看「平安銀行我知道」吧~
https://b.pingan.com.cn/paim/iknow/index.html
㈦ 微信支付支持哪些網站
京東等常用的購物網站都是支持的要使用此功能,用戶只需在微信中關聯一張銀行卡,並完成身份認證,即可將裝有app的智能手機變成一個全能錢包,之後即可購買合作商戶的商品及服務,在付費時只需在自己的智能手機上輸入密碼,無需任何刷卡步驟即可完成整個過程且簡便流暢。
㈧ 開通訪問微信介面的許可權,iP和埠應該指定多少
tcp 443埠,用的https協議
㈨ 微信移動支付時用官方給的例子嗎
微信支付jsapi(java版),具體代碼如下:
代碼太多,更多代碼請訪問http://www.vxzsk.com/394.html
1.項目使用springmvcrestful風格的,需要用到jar包請自行下載
2.整個項目只需要修改com.tenpay.configure.WxPayConfig中的配置信息就行。
//appid
publicstaticStringAPP_ID="公眾id";
//JSAPI介面中獲取openid,審核後在公眾平台開啟開發模式後可查看
publicstaticStringAPP_SECRET="公眾號中的秘鑰";
//受理商ID,身份標識
publicstaticStringMCH_ID="商戶id";
//商戶支付密鑰Key,裝完整數後,配置得到。32位長度
publicstaticStringKEY="商戶平台中配置證書,設置的秘鑰";
//非同步回調地址
publicstaticStringNOTIFY_URL="支付成功後的回調action";
publicstaticStringCHARTSET="UTF-8";
//加密方式
publicstaticStringSIGN_TYPE="MD5";
//redirect_uri,微信授權重定向地址
publicstaticStringREDIRECT_URI;
static{
try{
REDIRECT_URI=URLEncoder.encode("微信授權成功後重定向的action",CHARTSET);
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}
}
3.項目核心類com.tenpay.action.WxPayAction
pay函數:支付前准備函數,從資料庫獲取訂單號,查詢訂單金額,訂單描述、openid、prepay_id等等。
notify函數:支付成功後非同步回調函數。
一、新建基於springMVC框架的javaweb項目名字為wxPay
packagecom.tenpay.action;
importjava.io.ByteArrayOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.UnsupportedEncodingException;
importjava.util.Map;
importjava.util.SortedMap;
importjava.util.TreeMap;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.jdom2.JDOMException;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importcom.tenpay.RequestHandler;
importcom.tenpay.configure.WxPayConfig;
importcom.tenpay.service.ServiceUtil;
importcom.tenpay.util.MD5Util;
importcom.tenpay.util.Sha1Util;
importcom.tenpay.util.XMLUtil;
importnet.sf.json.JSONObject;
/*******************************************************************************
*<b>類名:WxPayAction.java</b><br/>
*功能:微信支付,調用jsapi<br/>
*日期:<br/>
*
*@authorV型知識庫www.vxzsk.com
*@version1.0
*
******************************************************************************/
@Controller
@RequestMapping("/v_3")
publicclassWxPayAction{
/**
*微信客戶端授權成功後根據redirect_uri參數調整到pay介面,去准備支付前信息介面
*@paramrequest
*@paramresponse
*@return
*@throwsException
*/
@RequestMapping("pay")
publicStringorder(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{
/**
*第一步:用戶同意授權,根據參數,獲取code
*授權成功後返回的授權碼,參考:http://mp.weixin.qq.com/wiki/17/.html#.E7.AC.AC.E4.B8.80.E6.AD.A5.EF.BC.9A.E7.94.A8.E6.88.B7.E5.90.8C.E6.84.8F.E6.8E.88.E6.9D.83.EF.BC.8C.E8.8E.B7.E5.8F.96code
*/
Stringcode=request.getParameter("code");
Stringstate=request.getParameter("state");
//state可以為任何含義,根據你前端需求,這里暫時叫商品id
//授權碼、商品id
System.out.println("code="+code+",state="+state);
/**
*第二步:通過code換取網頁授權access_token
*根據授權碼code獲取access_token,參考:http://mp.weixin.qq.com/wiki/17/.html#.E7.AC.AC.E4.BA.8C.E6.AD.A5.EF.BC.9A.E9.80.9A.E8.BF.87code.E6.8D.A2.E5.8F.96.E7.BD.91.E9.A1.B5.E6.8E.88.E6.9D.83access_token
*/
//下面就到了獲取openid,這個代表用戶id.
//獲取openID
Stringopenid=ServiceUtil.getOpenId(code);
//生成隨機字元串
Stringnoncestr=Sha1Util.getNonceStr();
//生成1970年到現在的秒數.
Stringtimestamp=Sha1Util.getTimeStamp();
//訂單號,自定義生成規則,只要全局唯一就OK
Stringout_trade_no="NO"+System.currentTimeMillis()+"0001";
//訂單金額,應該是根據state(商品id)從資料庫中查詢出來
Stringorder_price=String.valueOf(1);
//商品描述,應該是根據state(商品id)從資料庫中查詢出來
Stringbody="商品描述,測試....";
/**
*第三步:統一下單介面
*需要第二步生成的openid,參考:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
*/
RequestHandlerreqHandler=newRequestHandler(request,response);
//初始化RequestHandler類可以在微信的文檔中找到.還有相關工具類
reqHandler.init();
//執行統一下單介面獲得預支付id,一下是必填參數
//微信分配的公眾賬號ID(企業號corpid即為此appId)
reqHandler.setParameter("appid",WxPayConfig.APP_ID);
//微信支付分配的商戶號
reqHandler.setParameter("mch_id",WxPayConfig.MCH_ID);
//終端設備號(門店號或收銀設備ID),注意:PC網頁或公眾號內支付請傳"WEB"
reqHandler.setParameter("device_info","WEB");
//隨機字元串,不長於32位。推薦隨機數生成演算法
reqHandler.setParameter("nonce_str",noncestr);
//商品描述
reqHandler.setParameter("body",body);
//商家訂單號
reqHandler.setParameter("out_trade_no",out_trade_no);
//商品金額,以分為單位
reqHandler.setParameter("total_fee",order_price);
//APP和網頁支付提交用戶端ip,Native支付填調用微信支付API的機器IP。
reqHandler.setParameter("spbill_create_ip","123.57.58.123");
//下面的notify_url是用戶支付成功後為微信調用的action非同步回調.
reqHandler.setParameter("notify_url",WxPayConfig.NOTIFY_URL);
//交易類型,取值如下:JSAPI,NATIVE,APP,詳細說明見參數規定
reqHandler.setParameter("trade_type","JSAPI");
//------------需要進行用戶授權獲取用戶openid-------------
reqHandler.setParameter("openid",openid);//這個必填.
/*
*<xml><appid>wx2421b1c4370ec43b</appid><attach>支付測試</attach><body>
*JSAPI支付測試</body><mch_id>10000100</mch_id><nonce_str>
*</nonce_str><notify_url>http://wxpay.
*weixin.qq.com/pub_v2/pay/notify.v2.php</notify_url><openid>
*oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid><out_trade_no>1415659990</
*out_trade_no><spbill_create_ip>14.23.150.211</spbill_create_ip><
*total_fee>1</total_fee><trade_type>JSAPI</trade_type><sign>
*</sign></xml>
*/
//生成簽名,並且轉為xml
StringrequestXml=reqHandler.getRequestXml();
System.out.println("requestXml:"+requestXml);
//得到的預支付id
Stringprepay_id=ServiceUtil.unifiedorder(requestXml);
SortedMap<String,String>params=newTreeMap<String,String>();
params.put("appId",WxPayConfig.APP_ID);
params.put("timeStamp",timestamp);
params.put("nonceStr",noncestr);
params.put("package","prepay_id="+prepay_id);
params.put("signType","MD5");
System.out.println("params:"+JSONObject.fromObject(params).toString());
//生成支付簽名,這個簽名給微信支付的調用使用
SortedMap<Object,Object>signMap=newTreeMap<Object,Object>();
signMap.put("appId",WxPayConfig.APP_ID);
signMap.put("timeStamp",timestamp);
signMap.put("nonceStr",noncestr);
signMap.put("package","prepay_id="+prepay_id);
signMap.put("signType","MD5");
//微信支付簽名
StringpaySign=MD5Util.createSign(signMap,WxPayConfig.KEY);
System.out.println("PaySIGN:"+paySign);
//微信分配的公眾賬號ID(企業號corpid即為此appId)
request.setAttribute("appId",WxPayConfig.APP_ID);
//時間戳
request.setAttribute("timeStamp",timestamp);
//隨機字元串
request.setAttribute("nonceStr",noncestr);
//預支付id,就這樣的格式
request.setAttribute("package","prepay_id="+prepay_id);
//加密格式
request.setAttribute("signType",WxPayConfig.SIGN_TYPE);
//微信支付簽名
request.setAttribute("paySign",paySign);
return"pay";
}
/**
*非同步返回
*/
@RequestMapping("notify")
publicStringnotify(HttpServletRequestrequest,HttpServletResponseresponse){
try{
InputStreaminStream=request.getInputStream();
ByteArrayOutputStreamoutSteam=newByteArrayOutputStream();
byte[]buffer=newbyte[1024];
intlen=0;
while((len=inStream.read(buffer))!=-1){
outSteam.write(buffer,0,len);
}
outSteam.close();
inStream.close();
StringresultStr=newString(outSteam.toByteArray(),WxPayConfig.CHARTSET);
Map<String,String>resultMap=XMLUtil.doXMLParse(resultStr);
System.out.println("微信回調結果:"+resultMap.toString());
Stringresult_code=resultMap.get("result_code");
Stringis_subscribe=resultMap.get("is_subscribe");
Stringout_trade_no=resultMap.get("out_trade_no");
Stringtransaction_id=resultMap.get("transaction_id");
Stringsign=resultMap.get("sign");
Stringtime_end=resultMap.get("time_end");
Stringbank_type=resultMap.get("bank_type");
Stringreturn_code=resultMap.get("return_code");
//簽名驗證
//GenericValueuserLogin=delegator.findOne("UserLogin",UtilMisc.toMap("userLoginId","admin"),false);
if(return_code.equals("SUCCESS")){
//此處就是你的邏輯代碼
//修改資料庫支付狀態
}
request.setAttribute("out_trade_no",out_trade_no);
//通知微信.非同步確認成功.必寫.不然會一直通知後台.八次之後就認為交易失敗了.
response.getWriter().write(RequestHandler.setXML("SUCCESS",""));
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(JDOMExceptione){
e.printStackTrace();
}
return"notify";
}
}
㈩ 需要讓手機可以上微信 需要伺服器開通哪些埠 哪些ip
使用80、8080,登陸和交互。
使用:tcp 14000 埠 SCOTTY High-Speed Filetransferscotty-ft 發送語音文件