一個上午就搞定了,先後端基本上都是現成的,搞明白怎麼回事就容易了.html
js代碼java
mui.init({
swipeBack: true //啓用右滑關閉功能
});web
var price; //總支付金額
var dingdan = {}; //訂單對象
var wxChannel = null; //微信支付
var aliChannel = null; //支付寶支付
var channel = null; //支付通道spring
var ALIPAYSERVER = 'http://192.168.2.202:8080/drug_source/mhkyzfby'; //支付寶支付接口
var WXPAYSERVER = ''; //微信支付接口
mui.plusReady(function() {
var self = plus.webview.currentWebview();
price = self.price;
$id('price').innerText = price;json
// 獲取支付通道
plus.payment.getChannels(function(channels) {
alert(channels[0].id);
for(var i in channels) {
if(channels[i].id == "wxpay") {
wxChannel = channels[i];
} else {
aliChannel = channels[i];
}
}
}, function(e) {
alert("獲取支付通道失敗:" + e.message);
});後端
})api
$id('payment').addEventListener('tap', function() {服務器
var zf = document.getElementsByClassName('zf');
for(var i = 0; i < zf.length; i++) {
if(zf[i].classList.contains('mui-selected') == true) {
if(i == 0) {
var btnArray = ['否', '是'];
mui.confirm('您確認要支付嗎嗎', '點貨通', btnArray, function(e) {
if(e.index == 1) {
pay('alipay');
} else if(e.index == 0) {
mui.alert('請從新選擇支付方式');
}
})
} else {
var btnArray = ['否', '是'];
mui.confirm('您確認要支付嗎嗎', '點貨通', btnArray, function(e) {
if(e.index == 1) {
pay('wxpay');
} else if(e.index == 0) {
mui.alert('請從新選擇支付方式');
}
})
}微信
}
}app
})
function pay(id) {
var PAYSERVER = '';
if(id == 'alipay') {
PATSWEVER = ALIPAYSERVER;
channel = aliChannel;
} else if(id == 'wxpay') {
PATSWEVER = WXPAYSERVER;
channel = wxChannel;
} else {
plus.nativeUI.alert("不支持此支付!");
return;
}
var xhr = new XMLHttpRequest(); //http請求對象
var amount = price; //支付金額
//請求事件onreadystatechange 存儲函數(或函數名),每當 readyState 屬性改變時,就會調用該函數。
//readyState 存有 XMLHttpRequest 的狀態。從 0 到 4 發生變化。
//0: 請求未初始化
//1: 服務器鏈接已創建
//2: 請求已接收
//3: 請求處理中
//4: 請求已完成,且響應已就緒
xhr.onreadystatechange = function() {
switch(xhr.readyState) {
case 4:
if(xhr.status == 200) {
//channel 支付寶支付通道對象
//xhr.responseText//向後端請求的支付字符串
plus.payment.request(channel, xhr.responseText, function(result) {
plus.nativeUI.alert("支付成功", function() {
back();
})
}, function(error) {
plus.nativeUI.alert("支付失敗", error.code);
})
}
}
}
//發送get請求
xhr.open('GET', PAYSERVER + price);
xhr.send();
}
而後是spring MVC 支付寶公共參數申請就不在解釋了
@Controller
public class AlipayConfig {
// 合做身份者ID,簽約帳號,以2088開頭由16位純數字組成的字符串,查看地址:https://openhome.alipay.com/platform/keyManage.htm?keyType=partner
public static String partner = "***";
// 商戶的私鑰,須要PKCS8格式,RSA公私鑰生成:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.nBDxfy&treeId=58&articleId=103242&docType=1
public static String private_key="***" ;
// 支付寶的公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm?keyType=partner
public static String alipay_public_key = "***";
// 調試用,建立TXT日誌文件夾路徑,見AlipayCore.java類中的logResult(String sWord)打印方法。
public static String server_uri = "https://openapi.alipay.com/gateway.do";
// 字符編碼格式 目前支持 gbk 或 utf-8
public static String input_charset = "utf-8";
// 接收通知的接口名
// public static String service = "http://60.***.***.00/callbacks.do";
// public static String service = "mobile.securitypay.pay";
// APPID
public static String app_id = "***";
// ↑↑↑↑↑↑↑↑↑↑請在這裏配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
@RequestMapping(value = "/mhkyzfy", produces = "text/html;charset=UTF-8", method = { RequestMethod.GET })
public @ResponseBody
String get_Yhming(HttpServletRequest req, HttpServletResponse resp) {
// 實例化客戶端
AlipayClient alipayClient = new DefaultAlipayClient(
"https://openapi.alipay.com/gateway.do", app_id, private_key,
"json", input_charset, alipay_public_key, "RSA2");
// 實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
// SDK已經封裝掉了公共參數,這裏只須要傳入業務參數。如下方法爲sdk的model入參方式(model和biz_content同時存在的狀況下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
// 對一筆交易的具體描述信息
model.setBody("我是測試數據");
// 商品的標題/交易標題/
model.setSubject("App支付測試Java");
// 商戶網站惟一訂單號
model.setOutTradeNo("001");
// 該筆訂單容許的最晚付款時間,逾期將關閉交易。
model.setTimeoutExpress("30m");
// 訂單總金額,單位爲元
model.setTotalAmount("0.01");
// 銷售產品碼,商家和支付寶簽約的產品碼,爲固定值QUICK_MSECURITY_PAY
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model); request.setNotifyUrl("商戶外網能夠訪問的異步地址"); String orderInfo = null; try { // 這裏和普通的接口調用不一樣,使用的是sdkExecute AlipayTradeAppPayResponse response = alipayClient .sdkExecute(request); orderInfo = response.getBody(); System.out.println(response.getBody());// 就是orderString // 能夠直接給客戶端請求,無需再作處理。 } catch (AlipayApiException e) { e.printStackTrace(); } return orderInfo; }}