微信小程序支付

其实接入就是个封装的过程,把平台设置好了,封装好参数,避免着点坑就能接头,记录下吧

小程序支付比公众号支付简单,最后还是调h5的过程看下官方交互图:

开发文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1

关于一些基础的坑可以看我以前的记录,用的是ijpay:

公众号支付

h5支付


引入pom(具体我也忘了需要几个了,如果缺的话去maven库找一下就行了)主要用IJPay:

    <dependency>
      <groupId>com.github.javen205</groupId>
      <artifactId>IJPay</artifactId>
      <version>1.0</version>
    </dependency>
发送http应该需要

    <dependency>
      <groupId>com.squareup.okhttp</groupId>
      <artifactId>okhttp</artifactId>
      <version>2.7.5</version>
    </dependency>
    <dependency>
      <groupId>com.squareup.okhttp3</groupId>
      <artifactId>okhttp</artifactId>
      <version>3.8.0</version>
    </dependency>
    <dependency>
      <groupId>com.squareup.okio</groupId>
      <artifactId>okio</artifactId>
      <version>1.11.0</version>
    </dependency>




上代码:

	@ResponseBody
	@RequestMapping(value = "/xcxpay.do", method = RequestMethod.GET)
	public String xcxpay(HttpServletRequest request,HttpServletResponse response){
		System.out.println("小程序支付------start");
		String ip = IpKit.getRealIp(request);
		WxPayApiConfigKit.putApiConfig(getApiConfig());
		Map<String,String> params = WxPayApiConfigKit.getWxPayApiConfig()
				.setOpenId("okPwj0bujNVEIlWSaF28wuaXvE")
				.setAttach("测试")
				.setBody("支付测试")
				.setSpbillCreateIp(ip)
				.setTotalFee("100")
				.setTradeType(WxPayApi.TradeType.JSAPI)
				.setNotifyUrl(notify_url)
				.setOutTradeNo(String.valueOf(System.currentTimeMillis()))
				.build();
		System.out.println("params-->"+params);
		String xmlResult = WxPayApi.pushOrder(false,params);
		System.out.println("xmlResult - - - - -- "+xmlResult);
		Map<String,String> result = PaymentKit.xmlToMap(xmlResult);
		String return_code = result.get("return_code");
		String return_msg = result.get("return_msg");
		System.out.println("return_code--->"+return_code);
		System.out.println("return_msg--->"+return_msg);

		if (!PaymentKit.codeIsOK(return_code)){
			log.info("return_code is null");
			return null;
		}

		String result_code = result.get("result_code");
		if (!PaymentKit.codeIsOK(result_code)){
			log.info("result_code is null");
			return null;
		}

		// 以下字段在return_code 和result_code都为SUCCESS的时候有返回
		String prepay_id = result.get("prepay_id");
		System.out.println("prepay_id-->"+prepay_id);
		//封装调起微信支付的参数https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5
		Map<String, String> packageParams = new HashMap<String, String>();
		packageParams.put("appId",WxPayApiConfigKit.getWxPayApiConfig().getAppId());
		packageParams.put("timeStamp",System.currentTimeMillis() / 1000 + "");
		packageParams.put("nonceStr", System.currentTimeMillis() + "");
		packageParams.put("package", "prepay_id="+prepay_id);
		packageParams.put("signType", "MD5");
		String packageSign = PaymentKit.createSign(packageParams, WxPayApiConfigKit.getWxPayApiConfig().getPaternerKey());
		packageParams.put("sign", packageSign);
		String jsonStr = JsonKit.toJson(packageParams);
		System.out.println("小程序支付的参数:-->"+jsonStr);
		return jsonStr;
	}


设置下appid等

public static WxPayApiConfig getApiConfig() {
		return WxPayApiConfig.New()
				       .setAppId(appID)
				       .setMchId(mchID)
				       .setPaternerKey(partnerKey)
				       .setPayModel(WxPayApiConfig.PayModel.BUSINESSMODEL);
	}

打了一些log确认一下走的路程,亲测  最后生成的json字符串如下,返回给前端即可:

{
  "sign":"BCCC09AEF136443C820E71DE3A61F",
  "appId":"wx15b96f75ebaf",
  "timeStamp":"15211737",
  "signType":"MD5",
  "package":"prepay_id=wx201803221455382110426732635",
  "nonceStr":"15217070"
}

前端调起支付:

文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5

回调和h5支付一样,注意去重,具体看h5支付:http://blog.csdn.net/goligory/article/details/78392505


ijpay的项目地址: https://gitee.com/javen205/IJPay




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是小酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值