刚开始接到任务要接微信支付,一头雾水没接过,不知道咋接,百度一番之后,发现很多博客都说接微信支付各种坑,顿时心头一沉,这事怕不是那么好搞,哈哈。不过这一路对接过来,发现微信支付确实有很多需要注意的小细节,有的是容易看漏的,有的是官方文档都没提到的。有必要整理总结一下,后面再对接微信支付就很快了,好了话不多说,下面开始微信支付的对接流程。

一、微信支付配置

1.开通对应的支付功能

登录微信商户平台开通对应的支付功能,公众号支付、App支付、扫码支付、刷卡支付、H5支付

2,设置支付授权目录(公众号支付)、扫码回调链接(扫码支付)、H5支付域名(H5支付)

注意:支付授权目录为微信回调你的系统时所访问的链接,授权目录需要去掉最后一个斜杠后面的内容才行

3.设置业务域名、JS接口安全域名、网页授权域名

登录微信公众平台,开发-->接口权限-->网页服务-->网页授权-->修改

注意:步骤2、3中配置的域名都必须是备案过的域名

4.APPID绑定授权申请

在商户平台绑定APPID之后,然后在微信公众平台中审核通过

好了,微信支付配置基本上就是这么多

二、本机调试之花生壳

微信商户平台、公众平台配置的域名都需要是备案过的域名,但是我们一般只有生产环境才有备案过的域名,这个时候要在开发环境对接调试微信支付,我们可以用花生壳,花生壳有个6元体验版,提供一个备案过的域名。然后我们可以用花生壳的内网穿透将域名直接映射到本地服务上,这样就可以实现手机端访问H5或App,PC上能直接进行服务调试。在对接微信支付的过程中,花生壳解决了我的一大环境问题。

三、接口对接调试

1.公众号支付

官方支付接口文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

根据业务流程时序图,我们首先需要请求微信支付统一下单接口

上面是下单必传参数

appid为微信公众平台上的开发者ID

mch_id为商户平台上的商户号

spbill_create_id为终端IP,这里把获取代码贴出来,试了好几种,就这一种可以

/**

* 获取IP地址

* @param request

* @return

*/

public String getIpAddress(HttpServletRequest request) {

String ip = request.getHeader("x-forwarded-for");

if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){

ip = request.getHeader("Proxy-Client-IP");

}

if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){

ip = request.getHeader("WL-Proxy-Client-IP");

}

if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){

ip = request.getRemoteAddr();

}

if(ip.indexOf(",")>-1){

ip = ip.split(",")[0];

}

return ip.equals("0:0:0:0:0:0:0:1")?"127.0.0.1":ip;

}

notify_url为接收微信支付结果通知url,后面处理交易状态会用到

trade_type交易状态,我们这里是公众号支付就填JSAPI

openid需要重点强调下,这里必填栏写的否,如果你真的不填就太粗心啦,请看描述里面的备注trade_type=JSAPI时(即公众号支付),此参数必传,此参数为微信用户在商户对应appid下的唯一标识。

那么问题来了,怎么获取openid,即微信网页授权

可以参考官方技术文档,https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

网页授权分两种一种用来获取openid,一种用来获取用户信息,我们这里用第一种

获取openid步骤如下

第一步:用户同意授权,获取code

第二步:通过code换取openid

上面是理论描述,下面说下我的具体做法,上代码

先从H5端请求到服务端接口,再从服务端重定向到微信

服务端重定向到微信接口获取code

获取code的回调url需要进行编码,这边回调的url,我直接用的后台获取openid接口地址,回调url的时候微信支付那边会带上code,所以在获取openid的接口中可以通过request.getParameter("code");获得code

根据code请求微信接口获取openid,这里的appSecret为微信公众平台-->基本配置-->公众号开发信息-->开发者密码(AppSecret)

好了,统一下单接口的参数准备完毕,接下来可以开始调用了,服务端调用微信支付,我这边是直接依赖微信官方的wxpay-sdk

里面封装了微信支付用到的业务接口和工具类很方便

微信支付需要用到的配置参数开发平台appid,公众平台appid,商户号mchid,key为API密钥(在商户平台配置),这里的apiclient_cert.p12文件(API证书),需从商户平台下载,我直接放在工程目录下。

下单接口,直接调用 WXPay中封装的下单接口unifiedOrder,将接口返回的结果返回给前台

注意:接口中返回的sign不能直接用,如果直接返回给H5前台支付会报签名失败,这里要进行二次签名,这一点在微信官方文档中没有看到说明,参与二次签名的参数有appId、timeStamp、nonceStr、package、signType,格式一定要对,签名方法可以工具类里面的方法WXPayUtil.generateSignature()

注意:参数package的格式为"prepay_id="

微信支付对接流程及注意事项相关推荐

  1. JPA框架微信支付对接-V3支付接口,V2退款接口对接,复制即用

    框架:springDateJPA 对接微信支付首先需要需要在微信商户平台注册微信商户号 微信商户平台入口 微信公众平台入口 这里主要是微信支付的方式,一共有七种,我这里主要对接了3种,App支付,JS ...

  2. JSAPI微信支付开发流程和坑

    首先,我先简要说明一下微信支付开发的流程 众所周知,工欲善其事,必先利其器,微信官方推出了web微信开发工具,有windows.linux.版本的,根据自己的开发环境选择合适自己的,登陆公众平台--& ...

  3. 微信支付对接海关申报

    微信支付对接海关申报 1.先微信商户中心,进行海关申报配置 重点注意:请求接口前请先在以下页面提交您的海关信息,所有你需要报关的海关信息都需要提交 2.进行海关申报(本文章是没有子订单的) 注意:商户 ...

  4. 微信JSAPI支付对接流程及支付接口设计

    文章目录 前言 一.JSAPI支付场景及逻辑 二.开发步骤 1.设置支付目录 2.设置授权域名 3.业务流程 三.代码设计 1. 支付页面 2. Controller 3. JS调起支付 4. 工具类 ...

  5. 微信公众号支付对接流程

    一.首先申请公众号,认证,开通支付功能(具体配置参照API) 二.登录商户平台进行开发设置(具体配置参照API) 三.具体开发流程 首先,官方给出的SDK和demo和一些具体的API文档看起来比较麻烦 ...

  6. 小程序微信支付开发流程记录

    我所在公司需要开发一款商城小程序,里面需要用到微信支付,我负责里面的下单功能,从小程序端到后台的支付流程都是我自己开发的,由于我们组没有人有开发微信支付的经验,只有我有开发过JSAPI的微信支付的经验 ...

  7. 微信小程序收款手续费_小程序微信支付收款流程

    大家都知道,小程序具备微信支付功能,但是,很多商家还不知道具体的收款流程是什么?用户在小程序下单支付的款项究竟到了哪里?或者找第三方公司开发担心资金安全问题? 今天给大家详细的讲解一下: 在实现微信小 ...

  8. 小程序支付管理-新版支付对接流程

    背景简介 目前是灰度测试阶段,少部分小程序需要[支付管理]方式对接:大部分不需要 [支付管理]方式跟视频号的[自定义支付组件]对接流程类似:使用方式类似. 官方对接说明文档: 小程序支付管理服务介绍 ...

  9. 萤石微信支付对接(小程序版)

    1.萤石支付简介及流程 萤石支付,是对第三方支付平台的二次封装.考虑到的目的可能有:1.合资公司的金钱交易需要走总部财务 2.二次封装对接更加容易,与第三方支付sdk的交互都由萤石平台封装完成了. 1 ...

最新文章

  1. ecplise安装flowable插件
  2. matlab如何读取csv,Matlab:如何读取CSV文件以及如何读取带有字符串数据项的CSV文件 | 学步园...
  3. Spring IOC详解与配置
  4. Charles 二三谈
  5. Redis命令小细节
  6. 我的世界服务器怎么在计分板上面显示,我的世界计分板指令教程 计分板指令怎么使用...
  7. 烂泥:LVM学习之LVM基础
  8. storm流式处理框架
  9. Apollo-原理以及架构图分析
  10. STM32 - Cube介绍
  11. MacBook安装wget几种方式
  12. Googler:现在可以 Linux 终端下进行 Google 搜索了!
  13. matlab如何生成极坐标,如何在matlab中极坐标画图
  14. AlphaGo Zero 初探
  15. 游戏安全初学者学习资料
  16. ios airplay mirroring镜像
  17. 你知道wps可以开启护眼模式吗?
  18. 华为OD机试2023年最新题库(JAVA、Python、C++)
  19. 清华姚班教授: 「读博,你真的想好了吗?」与 UIUC 王鸿伟「读博,我想好了!」...
  20. 2018.9-江苏电赛省赛-基于STM32F103RCT6和FDC2214的手势识别装置

热门文章

  1. 提取lbp特征java代码_LBP特征提取实现
  2. Mysql 包含 函数
  3. 解决Adobe reader 8 突然打不开了并报许可协议的问题
  4. 阿里云的云存储服务OSS可以支持哪些企业级存储需求?如何操作和管理?
  5. 深度解析“编程思维”:从容迎接新时代的能力神器
  6. 乐器的音色与交响乐的欣赏
  7. java 适配器设计模式_学习、探究Java设计模式——适配器模式
  8. 【数据分析】图书馆数据-02重命名、索书号、分组
  9. 【skynet】skynet入口解析
  10. 解答篇:聊天表情框体实现