源代码如下
https://download.csdn.net/download/weixin_39592397/10874079
手机支付也称为移动支付(Mobile Payment),是指允许用户使用其移动终端(通常是指手机)对所消费的商品或服务进行账务支付的一种服务方式。
目前最常见的是支付宝和微信支付这两种。
刷卡支付是用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式。主要应用线下面对面收银的场景。
2.扫码支付
扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。
3.公众号支付
公众号支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有:
APP支付又称移动端支付,是商户通过在移动端应用APP中集成开放SDK调起微信支付模块完成支付的模式。
@Component
@ConfigurationProperties(prefix="qyweixin")
@PropertySource(value = {"classpath:qiyeweixin.properties"})
public class Appid {
public String sCorpID;
public String sToken;
public String sEncodingAESKey;
public String Secret;
@RequestMapping("/native")
@ResponseBody
public Map natives(HttpServletRequest request) throws Exception{
// 生成订单
TreeMap packageParams = new TreeMap();
// 企业号或公众号id 商户号
packageParams.put("appid", we.getAppid());
// 企业收款账号
packageParams.put("mch_id", we.getPartner());
// 随机字符串
String nonce_str = TenpayUtil.getRandomStr();
packageParams.put("nonce_str", nonce_str);
//商品名称
packageParams.put("body", "测试");
// 附加数据
packageParams.put("attach", "");
// 订单号
String out_trade_no = TenpayUtil.getRandomStr();
packageParams.put("out_trade_no", out_trade_no);
// 支付总金额(微信官方的支付单位是分)
String totalFee=TenpayUtil.getMoney("0.01");
packageParams.put("total_fee", totalFee);
// 生成订单的机器IP
String ip = request.getRemoteAddr();
packageParams.put("spbill_create_ip", ip);
// 回调URL
packageParams.put("notify_url", we.getNotifyurl());
// 设置支付方式
packageParams.put("trade_type", "NATIVE");
// 生成数字签名
String sign = MD5Util.createSign(packageParams, we.getAppid(),
we.getPartnerkey());
//out_trade_no totalFee ip
jdbc.update("insert into t_weixin(id,out_trade_no,totalFee,ip,flag,create_date,create_user)values(?,?,?,?,?,now(),?)",new Object[]{UUID.randomUUID().toString().replaceAll("-",""),out_trade_no,totalFee,ip,"1","张崇俊"});
// 拼接xml数据
String xml = "" + "" + we.getAppid() + " "
+ "" + we.getPartner() + " " + ""
+ nonce_str + " " + "" + sign + " "
+ "" + ""
+ out_trade_no + " " + "" + ""
+ " " + "" + totalFee + " "
+ "" + ip + " "
+ "" + we.getNotifyurl() + " "
+ "" + "NATIVE" + " " + " ";
//通过HttpClient对象向微信支付后台发送xml数据
String code_url="";
Map maps = new TreeMap();
try {
String createOrederURL="https://api.mch.weixin.qq.com/pay/unifiedorder";
HttpClient httpClient=new HttpClient(createOrederURL);
httpClient.setHttps(true);
httpClient.setXmlParam(xml);
httpClient.post();
String xmlStr=httpClient.getContent(); //从微信支付后台获取订单信息
System.out.println(xmlStr);
//解析xml数据得到用于支付的url地址
Map map =TenpayUtil.doXMLParse(xmlStr);
maps.put("code_url", map.get("code_url"));
maps.put("out_trade_no", out_trade_no);
} catch (Exception e) {
e.printStackTrace();
}
//返回订单信息到native.jsp
return maps;
}
var out_trade_no;
$(function(){
$.post("http://127.0.0.1:8081/weChars/native",{},function(data){
var url=data.code_url; //支付URL
out_trade_no=data.out_trade_no; //订单号
var qr = qrcode(10,'H')
qr.addData(url);
qr.make();
console.log(url);
$("#qrcode").html(qr.createImgTag());
$("#qrtext").html("请打开手机微信进行扫描");
queryPay();
})
});
代码运行结果
到此!整个支付接口已经全部开发基本算完毕
源代码如下
https://download.csdn.net/download/weixin_39592397/10874079