前沿:纯H5写的app需要支付功能,h+中有支付宝微信支付的demo,但是就支付宝而言
var PAYSERVER=‘http://demo.dcloud.net.cn/payment/?payid=’; 这个支付宝的请求地址没找到办法支付。
最后采用了经过修改代码如下
后台代码:
public String alipayMobile(OrderDetail orderdetail) throws AlipayApiException {
Map<String,String> map = new TreeMap<String, String>();
//bizcontent(业务字段)
Map<String,String> bizMap = new HashMap<String,String>();
bizMap.put("subject", orderdetail.getRoomName());//我这里用的是房间名字,根据业务写
bizMap.put("out_trade_no", orderdetail.getOrderCode());//订单号
bizMap.put("total_amount", orderdetail.getTradeAmt()+"");//金额
bizMap.put("product_code", "QUICK_MSECURITY_PAY");//固定的
String bizStr = JSON.toJSONString(bizMap);
map.put("app_id", app_id);//自己的appid(申请的时候有的)
map.put("method", "alipay.trade.app.pay");(就写这个)
map.put("charset", "utf-8");
map.put("sign_type", "RSA2");
map.put("timestamp", DateTimeUtil.getDateString19());//时间格式参照官方给的中间有空格
map.put("version", "1.0");
map.put("notify_url", notify_url);//你的回调地址(异步通知用)
map.put("biz_content", bizStr);//业务字段
//拼接好的含有&的字符串
String jsonStr2 = AlipaySignature.getSignContent(map);
//获取签名(支付宝官方api)
String sign = AlipaySignature.rsaSign(jsonStr2,merchant_private_key,"utf-8","RSA2");
map.put("sign", sign);
//对value值进行url编码
for(Map.Entry<String, String> map2:map.entrySet()){
String key = map2.getKey();
String value = map2.getValue();
value = URLEncoder.encode(value);
map.put(key, value);
}
//获取最终的json串(支付宝官方api)
String realStr = AlipaySignature.getSignContent(map);
return realStr;
}
manifest.json中
前端页面
正常来说应该先创建订单,然后调支付接口,然后通知后台,我们呢后端是做在一起了
//放在点击支付事件中
//创建订单 返回上面后端代码返回的字符串 如上图
ajaxPostPay({amount:$(".mui-numbox-input").val(),item_id:info.item_id},'/order/create',function(data){
// $("#zhifubao").html(data)
var aliChannel = null; // 支付宝支付
var channel = null;
// 获取支付通道
plus.payment.getChannels(function(channels){
aliChannel=channels[0];
//我把这个方法放在这里面没放外面,放外面会出现aliChannel还是null 无法调用支付宝
plus.nativeUI.showWaiting();
plus.nativeUI.closeWaiting();
channel = aliChannel;
if (data) {
plus.payment.request(channel, data, function(result) {
console.log(JSON.stringify(result));
mui.alert("付费成功");
}, function(e) {
console.log(JSON.stringify(e));
mui.alert("付费失败");
});
} else {
plus.nativeUI.alert("支付失败");
}
});
},function(e){
alert("获取支付通道失败:"+e.message);
});
})
注意:在测试的时候发现本地环境调试失败,后端把包放到服务器上就可以了。