微信公眾號調(diào)用支付寶手機網(wǎng)站支付

該文僅對于中間這種支付方式有參考價值喲


為了更準確地描述業(yè)務,標題有點繞,相信多念兩次就通順了。為什么不是微信公眾號支付寶支付了,因為支付寶的支付方式有很多種,手機網(wǎng)站支付這個接口剛好適用于微信公眾號支付的場景,為什么不是支付寶手機網(wǎng)站支付了,因為微信公眾號端和web端調(diào)用又有不同,會增加一點邏輯處理。在微信商城里,同學們對如下兩幅圖還有印象吧,沒印象的多半就是所逛的微信商城只有微信支付一種方式,對于商家來說,顧客選擇哪種方式都不重要,因為他們向平臺付的手續(xù)費比例都差不多,那為什么不提供支付寶支付呢,或者為什么搞得如此煩瑣非要重新用瀏覽器打開再進行支付了,這就需要把微信叫過來問問你干嘛要屏蔽支付寶,說好的和諧社會,和平共處呢?

如果你的產(chǎn)品經(jīng)理很倔,剛好又9要求在微信公眾號號中就是要調(diào)用支付寶支付,怎么gai,希望以下工作筆記對你有用,

一、準備工作

在支付寶開放平臺創(chuàng)建一個應用(https://openhome.alipay.com/platform/appCreate.htm)

創(chuàng)建成功后,從應用列表進入應用詳情,為該應用添加手機網(wǎng)站支付功能,既申請該接口

在申請過程中需要提供你系統(tǒng)的url, 支付寶的要求是系統(tǒng)需商品信息完整且達到接入該接口的標準,這要求迷惑我好久,所以我的申請被打回n次,如果你也遇到這種情況,不要急,支付寶在線客服(https://cschannel.alipay.com/newPortal.htm?scene=mysjpt)可以幫到你

配置回調(diào)url和通知url:

二,開發(fā)步驟

這里的步驟是通過瀏覽器調(diào)用接口時的步驟,后面補充通過微信端調(diào)用時的情況

step1. 按照慣例,先找接口文檔,會手把手教你接入該接口,接入成功后找到集成文檔. 阿里做的都是良心接口,提供了demo給大家參考,新版的調(diào)用方式更是直接把工具類封裝成sdk , 集成好sdk后再也不用擔心怎么樣去發(fā)送http請求等。
老版demo新版demo,目前新版demo只有php方式和RSA簽名方式;

step2. 傳遞參數(shù),以下代碼在demo中都有現(xiàn)在的,只是需要理解每個參數(shù)的意義

這里調(diào)用成功后生成如下頁面,如果將app_pay參數(shù)設置為Y,會彈出是否打開支付寶app的請求窗口。

當跳轉(zhuǎn)到這個頁面,你就大可放心了,支付寶已經(jīng)接手,

step3.處理返回結(jié)果

密碼輸入成功后,交易也成功,這里又輪到我們上場了。交易完成有兩個事情要做:
1.根據(jù)交易狀態(tài)異步處理訂單狀態(tài),即我們在準備工作中所配置的異步回調(diào)url:ALI_NOTIFY_URL = http://XXX/order/modify_order_status_alipay.html,這個方法中做了兩件事,首先將解析支付寶返回的參數(shù),再根據(jù)處理狀態(tài)對訂單進行處理即對系統(tǒng)數(shù)據(jù)庫進行操作

/**

* 支付寶支付成功回調(diào)

*@return

*/

@RequestMapping("modify_order_status_alipay.html")

public voidmodifyOrderStatusAlipay(HttpServletRequest request,HttpServletResponse response)throwsIOException {

System.out.println("i am in modify_order_status_alipay");

Map> orderMap = com.hj.custsys.wechat.common.SystemCache.getInstance().getOrderList();

System.out.println("orderMap=="+ orderMap);

ModelAndView modelAndView =newModelAndView();

//獲取支付寶POST過來反饋信息

Map params =newHashMap();

Map requestParams = request.getParameterMap();

for(Iterator iter = requestParams.keySet().iterator();iter.hasNext();) {

String name = (String) iter.next();

String[] values = (String[]) requestParams.get(name);

String valueStr ="";

for(inti =0;i < values.length;i++) {

valueStr = (i == values.length-1) ? valueStr + values[i]

: valueStr + values[i] +",";

}

valueStr =newString(valueStr.getBytes("ISO-8859-1"),"gbk");

params.put(name,valueStr);

}

//獲取支付寶的通知返回參數(shù)

//公司Id

String companyIdStr =newString(request.getParameter("body").getBytes("ISO-8859-1"),"UTF-8");

Integer companyId = Integer.parseInt(companyIdStr);

//商戶訂單號

String orderId =newString(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");

//支付寶交易號

String trade_no =newString(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");

//交易狀態(tài)

String trade_status =newString(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");

System.out.println("out_trade_no::"+ orderId);

System.out.println("trade_status::"+ trade_status);

String sHtmlText ="";

// ? if(AlipayNotify.verify(params)){//驗證成功

if(trade_status.equals("TRADE_FINISHED")) {

}else if(trade_status.equals("TRADE_SUCCESS")) {

//處理你的訂單狀態(tài)

}

System.out.println("狀態(tài)修改成功 end");

}

System.out.println("success");

response.getWriter().println("success");

sHtmlText ="success";

/*}else{//驗證失敗

System.out.println("fail");

response.getWriter().println("fail");

sHtmlText= "fail";

}*/

}

2.是否進行頁面跳轉(zhuǎn),如以下圖片是我配置的RETURN_URL =http://XXX/order_result.html處理后的結(jié)果

三、微信端調(diào)用

前兩步不用看或者只研究支付寶官方文檔就可以成功將錢送給支付寶。

為什么微信端調(diào)用支付寶會單獨寫一節(jié)了,前面就提到過,因為微信把支付寶屏蔽了,屏蔽了。上有政策,下有對策,難不到互聯(lián)網(wǎng)界的精兵奇才們。需要做的就是先判斷客戶端是否為微信,如果是微信提示用瀏覽器打開,大家應該對下圖面熟吧,


干貨在這里,

<%@pagelanguage="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>

<%@taglibprefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<%@taglibprefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

支付寶支付

正在進行支付寶支付...

請點擊右上角"在瀏覽器中打開"

在瀏覽器中完成支付

請在菜單中選擇"瀏覽器中打開"

在瀏覽器中完成支付

是否已完成付款?

請確保支付完成后,點擊

href="${pageContext.request.contextPath}/order/payment_verify.html?companyId=${companyId}&orderId=${orderId}">完成付款

varcontextPath ="${pageContext.request.contextPath}";

varua =navigator.userAgent.toLowerCase();

if(ua.match(/MicroMessenger/i) =="micromessenger") {

$(".container").css("display","block");

if(ua.indexOf('iphone') != -1|| ua.indexOf('ipad') != -1|| ua.indexOf('ipod') != -1) {

$(".weixin-tip-img-iphone").css("display","block");

$(".weixin-tip-img-android").css("display","none");

}else{

$(".weixin-tip-img-iphone").css("display","none");

$(".weixin-tip-img-android").css("display","block");

}

}else{

self.location.href= contextPath +"/order/ali_payment.html?companyId=${companyId}&orderId=${orderId}";}

原理就是一直判斷客戶端是否為支付寶支持的客戶端, 直到滿足條件為止,滿足條件后操作流程就回到了上一步 。?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容