微信支付开发流程及注意事项

247 篇文章 1 订阅

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程

 

1.支付能力介绍:

刷卡支付刷卡支付是用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式。主要应用线下面对面收银的场景。

扫码支付扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。

公众号支付公众号支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有:

◆ 用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付

◆ 用户的好友在朋友圈、聊天窗口等分享商家页面连接,用户点击链接打开商家页面,完成支付

◆ 将商户页面转换成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付

APP支付APP支付又称移动端支付,是商户通过在移动端应用APP中集成开放SDK调起微信支付模块完成支付的模式。

2.支付流程

步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。

步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。

步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay

步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明

步骤5:商户后台接收支付通知。api参见【支付结果通知API

步骤6:商户后台查询支付结果。,api参见【查询订单API

 

 

服务器需要返回给客户端的信息

"Data":{

"appid":"wxa7d1ec77cbf51cef",

"msg":"ok",

"noncestr":"MS40NzI2NTQ4NjI1OTMzMDQ4RTg=",

"package":"Sign=WXPay",

"partnerid":"1363835302",

"prepayid":"wx2016083122474134e6c61e8d0821148219",

"sign":"D6BEF6E1CE646B37DD6680924D4E81D5",

"timestamp":"1472654863"

}

 

【注意事项】

1.公众号支付只能在微信环境中使用,普通的浏览器不支持,因为其使用了他的私有js对象。

2.公众号支付和App支付对应不同的商户号,这点管理起来可能不太方便。

3.交易金额默认为人民币交易,接口中参数支付金额单位为【分】,参数值不能带小数。对账单中的交易金额单位为【元】。外币交易的支付金额精确到币种的最小单位,参数值不能带小数点。

4.公众号支付和App支付使用的某些键有时候是下划线,有时候又是驼峰,特别需要注意。

5.微信支付更多使用XML构造协议数据,可以使用XML工具构造【带XML头xml?】,也可以拼接。

6.回调等最好使用https协议增强安全性。

7.微信支付采用了先生成预支付订单的方式,如果用户在第一次支付生成预支付订单之后取消支付,那么重新发起支付就不能再生成一个预支付单,避免重复,所以需要在第一次保存住这个预支付订单。

8.公众号支付需要在微信公众号中做一些域名相关的设置【四项】和在商户平台的API安全中做apikey的设置。

 

9.APIKEY来自于商户平台,通过商户信息登录商户平台之后自己设置32个字符的密码。

10.公众号支付的时候支付方式为JSAPI,参数中必须带上openid,即用户的微信号在微信公众号中的唯一标识。

获取这个openid需要通过oauth2授权,流程如下:

提交订单,然后跳转到授权页面

window.location.href="../h5/Order/wxpayAuth?tradeId="+tradeId;

授权处理,参数tradeId通过state传递

String tradeId = getPara("tradeId");        String oauth2URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + WxpayConfig.APPID_HTML

                + "&redirect_uri=" + SystemConfigUtil.getSystemConfig().getHostPrefix() + JFinal.me().getContextPath()

                + "/h5/Order/wxpayAuth" + "&response_type=code&scope=snsapi_base&state=" + tradeId + "#wechat_redirect";

        // 1.获取用户code

        String code = getPara("code");        if(StrKit.isBlank(code)){// 不存在就触发微信的调用

            HandlerKit.redirect301(oauth2URL, getRequest(), getResponse(), new boolean[1]);

        } else{

            tradeId = getPara("state");

            HashMap<String, Object> tokenmap = new HashMap<String, Object>();

            tokenmap.put("appid", WxpayConfig.APPID_HTML);

            tokenmap.put("secret", WxpayConfig.SECRET_HTML);

            tokenmap.put("code", code);

            tokenmap.put("grant_type", "authorization_code");

            String tokenJson = "";

            try{

                tokenJson = HttpUtil.getHttpByGet("https://api.weixin.qq.com/sns/oauth2/access_token", tokenmap);

            }

            catch(Exception e){

                e.printStackTrace();

                return;

            }

            JSONObject data = JSON.parseObject(tokenJson);

            JSONObject object = getOrderInfo(tradeId);            object.put("tradeId", tradeId);

            object.put("openid", data.getString("openid"));

 

           String return_url = SystemConfigUtil.getSystemConfig().getHostPrefix() + JFinal.me().getContextPath()

                    + "/website/wxpay.html";

           try{

                getResponse().sendRedirect(return_url + "?result=" + URLEncoder.encode(object.toString()));

            }

            catch(IOException e){

               e.printStackTrace();

            }

        }

参考资料:

微信开放平台官方资料

方培工作室:微信网页支付

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值