关于微信支付相关开发

       由于公司业务需要,要求项目中添加微信支付功能,想着以前做过银联在线支付,起初还以为没啥难度,看看技术文档啥的应该都能很快完成吧。结果在做的过程中才发现这样没准备好,那样没准备好,我能在规定时间拿出来吗?无事的时候进行了一下小小的总结,好了,不多说,直接开始微信支付开发。

       在这个项目中一共做了三种支付方式:扫码支付、APP微信支付、微信公众号支付;关于销账三种模式都是都是一样的,所以先说生成订单。

      一、微信扫码支付:

      微信扫码支付是三种支付方式中最简单的,微信官方提供了两种模式,我采用的第二种模式,因为第二种模式相较于第一种更为简单,而且第二种就能够满足业务要求了,就没有去管第一种。


    根据上面的时序图,我们需要做的仅仅只有红色的那一部分,获取前台传入的订单金额,调用微信统一下单接口,完成下单,代码如下:

String appid =wxMsg.get("APPID");//公众账号ID
String mch_id =wxMsg.get("MCH_ID");//商户号
String nonce_str = RandCharsUtils.getRandomString(16);//随机字符串
String body = "商品描述";//商品描述  
String detail = "微信扫码支付";
String attach = "";//私有域信息,在支付回调通知中会原样返回,可以包含销账信息
String out_trade_no = RandCharsUtils.getOrderNum();//商户订单号  
int total_fee = new Integer(amLong.toString());//单位是分,即是0.01元
String spbill_create_ip = "127.0.0.1";
String time_start = RandCharsUtils.timeStart();//订单开始时间
String time_expire = RandCharsUtils.timeExpire();//订单结束时间
String notify_url =WeixinConfigUtils.notify_url;//通知地址,用户支付后的回调地址,需要外网能够访问
String trade_type = "NATIVE";//支付类型,三种支付类型为NATIVE,APP,JSAPI
//参数:开始生成签名
SortedMap<Object,Object> parameters = new TreeMap<Object,Object>();
parameters.put("appid", appid);
parameters.put("mch_id", mch_id);
parameters.put("nonce_str", nonce_str);
parameters.put("body", body);
parameters.put("detail", detail);
parameters.put("attach", attach);
parameters.put("out_trade_no", out_trade_no);
parameters.put("total_fee", total_fee);
parameters.put("time_start", time_start);
parameters.put("time_expire", time_expire);
parameters.put("notify_url", notify_url);
parameters.put("trade_type", trade_type);
parameters.put("spbill_create_ip", spbill_create_ip);
String sign = WXSignUtils.createSign("UTF-8", parameters);//生成签名
Unifiedorder unifiedorder = new Unifiedorder();//订单实体
unifiedorder.setAppid(appid);
unifiedorder.setMch_id(mch_id);
unifiedorder.setNonce_str(nonce_str);
unifiedorder.setSign(sign);
unifiedorder.setBody(body);
unifiedorder.setDetail(detail);
unifiedorder.setAttach(attach);
unifiedorder.setOut_trade_no(out_trade_no);
unifiedorder.setTotal_fee(total_fee);
unifiedorder.setSpbill_create_ip(spbill_create_ip);
unifiedorder.setTime_start(time_start);
unifiedorder.setTime_expire(time_expire);
unifiedorder.setNotify_url(notify_url);
unifiedorder.setTrade_type(trade_type);
//构造xml参数
String xmlInfo = HttpXmlUtils.orderXmlInfo(unifiedorder);
String wxUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";//统一下单接口
String method = "POST";
String weixinPost = HttpXmlUtils.httpsRequest(wxUrl, method, xmlInfo).toString();//统一下单返回结果
      在下单结果中,如果统一下单成功,在返回结果中会有“result_code”字段为“SUCCESS”,“code_url”为二维码内容,将该内容放入二维码中,将二维码返回给前台即可。
      二、APP微信支付:

      APP微信支付较微信扫码支付要复杂一点,但也是大同小异,按照流程文档流程来基本上没有太多问题,只是比扫码支付在下单成功之后多了一步操作,需要使用下单返回的“prepay_id”进行签名在返回给APP端,起时序图如下:


     下单与签名生成客户端支付信息代码如下:

String appid =WeChatConfigUtils.appid;//APP账号ID
String mch_id =WeChatConfigUtils.mch_id;//商户号
String nonce_str = RandCharsUtils.getRandomString(16);//随机字符串
String body = "商品描述";//商品描述  
String detail = 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值