微信商户开发文档之扫码支付


微信文档:https://pay.weixin.qq.com/wiki/doc/api/native.php

 

第一步

在微信服务号设置native支付回调url。该URL会在微信用户扫描是调用。


 

第二步生成微信扫描支付二维码对应的URL

生成该URL后,就可以用该URL在草料去生成二维码。

URL的形式为:weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX,只改参数,前面的weixin://wxpay/bizpayurl是固定的。

 

public static String createPayQrCodeUrl() {

long timeStamp = System.currentTimeMillis() / 1000;

String stringA = "appid=" + APP_ID + "&mch_id=" + MCH_ID

"&nonce_str=" + NONCE_STR + "&product_id=" + PEODUCT_ID

"&time_stamp=" + timeStamp + "&key=" + KEY;

String sign = DigestUtils.md5Hex(stringA).toUpperCase();

String url = "weixin://wxpay/bizpayurl?sign="

sign + "&appid=" + APP_ID + "&mch_id=" + MCH_ID

"&product_id=" + PEODUCT_ID + "&time_stamp=" + timeStamp

"&nonce_str=" + NONCE_STR;

 

return url;

}

第三步,用第二步生成的URL去生成二维码。

 

第四步,编写native支付对应的回调接口,该url是第一步设置的url

在该接口中,根据productid和用户的openid动态生成订单,用【统一下单API】去生成微信支付订单,微信支付系统根据商户系统的请求生成预支付交易,返回交易会话标识prepay_id

程序得到交易会话标识prepay_id后,把它拼成对应的xml数据返回给微信支付系统。

 

@ResponseBody

@RequestMapping(value = "/public/getProductId")

public void getProductId(HttpServletRequest request,

HttpServletResponse response) {

String notify_url = "http://www.benewit.cn/hzfwh-web/public/wxpay/notifyController";

try {

String xml = getBody(request);

Map<String, String> map = XMLUtils.parseXml(xml);

String appid = map.get("appid");

String mchid = map.get("mch_id");

String productid = map.get("product_id");

String openid = map.get("openid");

 

String prepayid = getPayResult(appidmchid,

"76baa506a4aef345a048cd2ea8edb1a9",

"42baa06a3u3fd345qw48ctyea8ed1300"notify_url"支付测试",

0.01, request.getRemoteAddr(), StringUtils.generateUuid(),

productidopenid);

System.out.println("prepayid:" + prepayid);

String nonceStr = StringUtils.generateUuid();

SortedMap<String, String> packageParams = new TreeMap<String, String>();

packageParams.put("return_code""SUCCESS");

packageParams.put("mch_id"mchid);

packageParams.put("appid"appid);

packageParams.put("nonce_str"nonceStr);

packageParams.put("prepay_id"prepayid);

packageParams.put("result_code""SUCCESS");

 

RequestHandler reqHandler = new RequestHandler(nullnull);

reqHandler.init(appid"76baa506a4aef345a048cd2ea8edb1a9",

"42baa06a3u3fd345qw48ctyea8ed1300");

 

String sign = reqHandler.createSign(packageParams);

 

String returnArgs = "<xml><return_code>SUCCESS</return_code>"

"<appid>" + appid + "</appid>" + "<mch_id>" + mchid

"</mch_id>" + "<nonce_str>" + nonceStr + "</nonce_str>"

"<prepay_id>" + prepayid + "</prepay_id>"

"<result_code>SUCCESS</result_code>" + "<sign>" + sign

"</sign></xml>";

 

response.getWriter().write(returnArgs);

catch (JDOMException e) {

e.printStackTrace();

catch (IOException e) {

e.printStackTrace();

}

 

}

第五步

完成上面的程序,微信用户扫二维码的时候,就会跳出支付界面,当支付成功的时候,微信支付后台会回调在生成微信支付时设置的回调url,并传输xml格式的数据,程序可以根据xml数据去修改数据库中的记录。如果不理解这个步骤,请查看【统一下单API】。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值