一. H5支付配置

1.在微信商户平台中进行登录并申请相关功能和配置

1.1微信商户平台https://pay.weixin.qq.com/index.php/core/home/loginreturn_url=%2F

登录并配置,在商户平台上 - 产品中心 - 开通相关的产品,比如我这里使用的是 H5支付

1.2 然后配置相关的参数

//APPID
//mchid(商户号)
//API key(V3的密钥)
//privateKey(商户私钥)
//mchSerialNo (证书序列号)
//以上参数的配置说明可以参考微信文档  https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_6_1.shtml

二.开发

2.1导入相关依赖

<dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-apache-httpclient</artifactId><version>0.2.2</version>
</dependency>

2.2 代码编写

//此方法为微信的H5支付
//cashNum      微信支付的金额单位是 分,如果使用的元,在这里需要转换。
//orderNo      商户的订单号,在同一个商户号下必须是唯一的。
//redirect_url 支付成功后的跳转地址。
public ReturnJson weChatPay_H5(int cashNum, String orderNo,String redirect_url) throws Exception {//1.私钥为String字符串的方式来加载//PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey(new ByteArrayInputStream(WX_KEY.getBytes("utf-8")));//2.通过加载文件的方式来读取私钥String path = this.getClass().getClassLoader().getResources("./apiclient_key.pem").nextElement().getPath();//加载商户私钥(私钥存储在文件)PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey(new FileInputStream(path));//加载平台证书(mchId:商户号,mchSerialNo:商户证书序列号,apiV3Key:V3密钥)AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(new WechatPay2Credentials(WX_MCH_ID, new PrivateKeySigner(WX_Serial_Number, merchantPrivateKey)),V3_key.getBytes("utf-8"));//初始化httpClientCloseableHttpClient builder = WechatPayHttpClientBuilder.create().withMerchant(WX_MCH_ID, WX_Serial_Number, merchantPrivateKey).withValidator(new WechatPay2Validator(verifier)).build();//请求的微信支付地址HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/pay/transactions/h5");//发送给微信的部分json参数//amount 为订单的金额信息//total  为订单总金额(单位:分)//currency 货币类型//scene_info 支付的场景相关信息//payer_client_ip  用户的终端ip,支持IPV4和IPV6//h5_info  h5支付的场景信息//type  支付场景类型//mch_id   商户号//description  商品描述//notify_url  回调通知地址(此地址是用户支付成功后,微信方要发送支付成功的通知)//out_trade_no  商户订单号//goods_tag        商品标签//appid         appidString reqData = "{"+ "\"amount\": {"+ "\"total\": "+cashNum+","+ "\"currency\": \"CNY\""+ "},"+ "\"scene_info\": {"+ "\"payer_client_ip\":\"14.23.150.200\","+ "\"h5_info\": {"+ "\"type\": \"Wap\"" + "}},"+ "\"mchid\": \""+WX_MCH_ID+"\","+ "\"description\": \"优选商城\","+ "\"notify_url\": \""+AliPay_H5_NotifyUrl+"\","+ "\"out_trade_no\": \""+orderNo+"\","+ "\"goods_tag\": \"WXG\","+ "\"appid\": \""+WX_APP_ID+"\"" + "}";StringEntity entity = new StringEntity(reqData,"utf-8");entity.setContentType("application/json");httpPost.setEntity(entity);httpPost.setHeader("Accept","application/json");CloseableHttpResponse response = builder.execute(httpPost);try {int statusCode = response.getStatusLine().getStatusCode();if (statusCode == 200) {String url = URLEncoder.encode(redirect_url, "GBK");JSONObject js = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));String  aa = js.get("h5_url").toString();js.put("h5_url",aa+"&redirect_url="+url);String payUrl = js.toJSONString();return ReturnUtils.returnVal(CommonConstants.appCode.SUCCESS.get(),payUrl);} else if (statusCode == 204) {return ReturnUtils.returnVal(CommonConstants.appCode.SUCCESS.get(), EntityUtils.toString(response.getEntity()));} else {return ReturnUtils.returnVal(CommonConstants.appCode.DATAERROR.get(), EntityUtils.toString(response.getEntity()));}} finally {response.close();}
}

2.3 编写H5支付回调接口

 //用户支付成功后,通知的回调地址//进行两步操作 1.接收微信发送的参数后,验签并解析。//2.根据微信给到的参数,出发后续的操作,比如修改订单状态、发送站内信等等//此接口微信可能会出现多次调用,请注意处理@ResponseBody@RequestMapping(value = "/wechatRefundNotify",produces = {"application/json;charset=utf-8"})public ResultEntity wechatRefundNotify(@RequestBody WeChatPayEntity weChatPayEntity) {AesUtil aesUtils = new AesUtil(this.V3_key.getBytes());try {String string = aesUtils.decryptToString(weChatPayEntity.getResource().getAssociated_data().getBytes(), weChatPayEntity.getResource().getNonce().getBytes(), weChatPayEntity.getResource().getCiphertext());JSONObject jsonObject = JSONObject.parseObject(string);//获取订单号String out_trade_no = jsonObject.getString("out_trade_no");//获取支付的订单状态, SUCCESS(支付成功)String trade_state = jsonObject.getString("trade_state");//获取支付状态  SUCCESSif(refund_status.equals("SUCCESS")){//进行支付成功后的相关操作.....//然后返回给微信指定的参数,否则微信可能会再次通知return new ResultEntity("SUCCESS", "成功");}else {//这里是支付状态错误.....//进行相关的操作return new ResultEntity("FAIL", "失败");}} catch (Exception e) {//错误处理}return new ResultEntity("FAIL", "失败");}

2.4 微信回调接收的相关参数实体类

 //WeChatPayEntity 类public class WeChatPayEntity {//通知创建时间private String create_time;//回调摘要private String summary;//通知数据类型private String resiyrce_type;//通知的资源数据(支付订单的相关信息)private WeChatRequestEntities resource = new WeChatRequestEntities();}
//WeChatRequestEntities 类
public class WeChatRequestEntities {//微信返回交易状态//SUCCESS:支付成功//REFUND:转入退款//NOTPAY:未支付//CLOSED:已关闭//REVOKED:已撤销(付款码支付)//USERPAYING:用户支付中(付款码支付)//PAYERROR:支付失败(其他原因,如银行返回失败)private String trade_state;//商户订单号(我们对接H5支付接口时候传入的 订单号)private String out_trade_no;//附加数据private String associated_data;//随机串private String nonce;//数据密文private String ciphertext;
}

微信H5支付及通知回调相关推荐

  1. php根据浏览器调用支付_Android通过外部浏览器调用微信H5支付,Android+PHP详解

    看了好多关于讲解微信H5支付开发的文章,大多数都是通过微信内部浏览器来调用支付接口(其实就是公众号支付),可能是因为H5支付接口刚开放不久吧. 微信官方体验链接:http://wxpay.wxutil ...

  2. php微信h5支付demo,微信h5支付 demo-HTML5微信支付DEMO下载 最新版--pc6下载站

    在微信支付已经霸占了大部分人生活习惯的年代,一个不支持微信支付的商家都不好意思开店了,程序猿们可以下载查看HTML5微信支付DEMO来帮助您熟悉微信支付的代码,马上下载查看微信h5支付demo的内容吧 ...

  3. 微信h5支付,微信外浏览器支付实现

    对接第三方比较重要的点都有什么? 1.按规则 2.单独封装 3.做好出入参 2021-02-07修改 看一下官方文档还是很必要的,知道必不可少的参数是什么:https://pay.weixin.qq. ...

  4. Android 微信h5支付

    一.需求背景 H5现在承载着很多的需求活动,要想在h5界面中做支付可以使用js调用原生的支付也可以使用Android webview做支付.微信H5支付官网 二.接入微信H5支付流程 1.用户在商户侧 ...

  5. 微信支付的服务器配置url超时,微信H5支付商家存在未配置的参数,请联系商家解决的...

    前言 考虑到网络上微信的h5支付都是讲解原生app的,ionic3的基本没有,我自己总结下. 大致流程 1.用户在商户侧完成下单,使用微信支付进行支付 2.由商户后台向微信支付发起下单请求(调用统一下 ...

  6. 记录下关于微信h5支付那点事儿(百分之80拷贝官方)

    LZ-Says:困意上来,感觉简直痛不欲生~ 生亦何欢~!!! 前言 这俩天在玩微信的H5支付,不得不说,腾讯出品,Enmmm,懂就好... 原想着这是一件很easy的东西,WebView加载一个地址 ...

  7. 【第二十篇】C#微信H5支付 非微信内浏览器H5支付 浏览器微信支付

    微信开发者文档 微信H5支付官方文档   请阅读清楚  最起码把所有参数看一遍 这个地方也可以看看 微信案例 http://wxpay.wxutil.com/mch/pay/h5.v2.php,请在微 ...

  8. 手机浏览器微信h5支付

    'WEIXINPAY_CONFIG' => array(         'APPID'      => '', // 微信支付APPID         'MCHID'      =&g ...

  9. 微信H5支付 终于跑起来了

    <!-- 微信 --> <dependency><groupId>com.github.binarywang</groupId><artifact ...

最新文章

  1. 使用Word2010灵活掌握文档结构
  2. 微信支付封杀虚拟货币交易,亦是重拳无情!
  3. Java集合List,Set,Map,Queue,Deque
  4. python每天20分钟_每天用 Jupyter 写 5 分钟的日记
  5. Qt学习之路1---软件下载安装及工程简介
  6. vs2012如何为进行单元测试
  7. NYOJ--22--素数求和问题
  8. Qt QScrollArea and layout in code
  9. Ubuntu20设置蓝牙
  10. 基于MATLAB的说话人语音识别声纹识别系统
  11. PMP-质量管理7种质量工具详细对比
  12. 驱动大师服务器获取信息失败,360驱动大师、鲁大师,连测硬件信息都不准,我拿什么信你们...
  13. 基于微信小程序的资产管理平台的设计与实现
  14. 冬天 计算机无法启动不了怎么办,每次到冬天电脑就开不了
  15. 史上z..zui难回答的26个问题(1)
  16. Laravel数据库 Eloquent 操作返回值
  17. 企业上云成趋势 看超融合如何开箱即用、一步上云
  18. 初体验 | 购买激活Typora软件
  19. Linux 系统和安全
  20. ios 按钮文字下划线_iOS - UIButton设置文字标题下划线以及下划线颜色

热门文章

  1. Python入门(第一节):Python版本如何选和安装
  2. Win10 x64 中VC6 安装卡死、无法单步调试、调试退出进程没有结束
  3. ensp华为交换机基础命令
  4. 水表读数图解_家用水表怎么看,家用水表的读数方法图解
  5. 错误总结关于单片机课程设计——温度语音(基础模块)
  6. android 文档api
  7. 华为快应用 - web标签无法加载部分网页
  8. 《C++程序设计实践》实验4
  9. 【Java程序设计】实验七 网络通信
  10. 不允许sam账户和共享的匿名枚举_“不允许SAM帐户和共享的匿名枚举”是什么?...