公司最近接了个项目,该项目需要用到微信支付模块。本想简单点处理直接前端发起支付,后端回调接收。但前端不知道出了什么问题,一直无法成功调起微信支付。无奈只好转后台来做。
开发流程
1、先在微信支付 商家里配置授权目录,如果你的授权目录是http://www.xxx.com/wechat/,那你的支付地址(jsp/controller地址)则必须是http://www.xxx.com/wechat/xxx。微信支付授权目录配置地址: https://pay.weixin.qq.com/index.php/extend/pay_setting
2、获取微信支付的商户号和密钥,微信公众号的appid
3、配置在公众号上有个跳转地址(我暂时的做法是发个信息给后台,后台传个地址给微信客户端,然后在点击这个地址进行跳转)
4、后台开发
4.1 代码可以从微信官网上获取demo,进行修改(注意重点:我是用MD5加密,先进行一次加密,然后发起 统一下单请求给微信服务端,微信服务端返回prepare_id和其他信息,里面有个sign值(神坑,我以为是给页面上的paySign,结果测试不是),用这个prepare_id再进行第二MD5加密,然后返回给页面,页面再调用微信内核发起支付请求)
4.2 md5加密生成签名的时候需要注意的是先排序再生成签名
第一次排序如下:
appid=你的微信服务号APPid&body=标题&mch_id=微信支付商户号&nonce_str=随机码¬ify_url=通知回调地址&openid=当前支付用户openip&out_trade_no=订单号&spbill_create_ip=ip&total_fee=金额(单位是分)&trade_type=JSAPI&key=微信支付商家密钥
总结
其实真正做完是不难,主要就是要注意:
1、要两次签名,第一次签名给微信服务端获取prepare_id,第二次签名给页面发起支付请求。
2、授权目录要配置好,网上很多人说授权的域名一定要认证过的域名,其实不用,我用ngrok生成的域名也一样可以。