微信支付相关知识

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

【微信支付】公众号、商户基础配置和流程(包括设置支付授权目录、测试支付目录和白名单、JS接口安全域名、授权回调域名等)

一、使用场景以及说明

     使用场景:商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程。

 说明:1.用户打开图文消息或者扫描二维码,在微信内置浏览器打开网页进行的支付。

     2.商户网页前端通过使用微信提供的 JSAPI,调用微信支付模块。这种方式,适合需要在商户网页进行选购下单的购买流程。

二、准备工作

公共号支付需要提前在微信公共平台进行业务配置,包括设置支付授权目录测试支付目录和白名单设置JS接口安全域名以及设置授权回调页面域名

1.进行微信公众支付之前,我们需要申请个公众号,以及申请微信支付的功能。

2.支付授权目录:

位置:微信支付——>开发配置——>公共号支付

1) 所有使用公众号支付方式发起支付请求的链接地址,都必须在支付授权目录之下;

2) 正式支付授权目录最多设置3个,测试授权目录最多设置1个,且域名必须通过ICP备案;==》截止目前(2017.11.15)该支付授权目录设置已经移动至

商户平台-->产品中心-->开发配置(传送门:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3),且最多可以同时设置5个目录

目录示例:

      ||||||||    如果未设置授权目录或者目录不对,在手机微信调用jsapi时报错  

 

 

3) 头部要包含http或https,须细化到二级或三级目录,以左斜杠“/”结尾。

业务中发起支付的页面地址必须在授权目录下,否则调用下单接口时会提示“当前页面的URL未注册”。

 

 

这里再啰嗦地补充两点:

1)不使用框架的情况下,比如将官方sdk下载下来,改成demo放在根目录下,demo/example/jaspi.php,授权目录可参考 http://www. ×××.com/demo/example/

2 )使用框架的情况下,比如ThinkPHP, 项目名叫test ,目录结构如下,test/Application/Home/controller/WxpayController.class.php,授权目录可参考 http://www. ×××.com/index.php/Home/Wxpay/

 

3.JS接口安全域名:

位置:微信支付——>公共号设置——>功能设置——>JS接口安全域名

说明:设置JS接口安全域名后,公众号开发者可在该域名下调用微信开放的JS接口。

注意事项:

1) 可填写三个域名,要求是一级或一级以上域名(例:qq.com,或者 www.qq.com ),需使用字母、数字及“-”的组合,不支持IP地址及端口号;

2) 填写的域名须通过ICP备案的验证;

3)一个自然月内最多可修改并保存三次。

 

4.授权回调页面域名:(用来jsapi支付的必须)

位置:微信支付——>接口权限——>网页授权获取用户基本信息

用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下,以确保安全可靠。

注意事项:

1) 回调页面域名需使用字母、数字及“-”的组合,不支持IP地址及端口号。填写的域名需与实际回调URL中的域名相同;

2) 填写的域名须通过ICP备案的验证。

获取用户授权时redirect_uri对应的URL必须在此域名下,否则回调的地址会无法打开。

 

 

 

三、开发步骤

说明:整个微信公众号支付的流程如下:

【1】用户点击公众号内微信商城打开H5的支付页面

【2】H5页面通过JS调用微信支付接口

【3】微信服务器通过判断输入的JSON数据,返回给客户端相应的成功或失败信息

官方demo结构如下:

 

1.JSAPI支付——H5网页端调起支付接口 

1)用户同意授权,获取code

请求链接:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#we-chat_redirect

 

 

2)如果有code,直接就通过code能获取用户openid

如果没有code,通过createOauthUrlForCode方法,传入必要参数,获取code

3)如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。

若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数

redirect_uri?state=STATE

4)code说明以及scope的两种方式说明

【1】code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

这里获取到code 和 state(订单号) 后, 对订单进行验证,用户余额也进行验证,如果条件都满足则才能进行下面的流程。

【2】scope的两种方式说明:

微信提供了两种授权方式:snsapi_base和snsapi_userinfo。

snsapi_base:不弹出授权页面,直接跳转,只能获取用户openid;

snsapi_userinfo:弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息。

想要获取code,需要构造如下地址:

2. 通过code换取网页授权access_token (这里也获取到了openid)

1)请求链接:https://api.weixin.qq.com/sns/oauth2/access_token

?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

 

 

2)获取openid:openid是微信支付jsapi支付接口必须的参数

【1】如果网页授权的作用域为snsapi_base(静默授权),则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。

【2】如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。

 

 

3)getOpenid方法中调用createOauthUrlForOpenid方法获取openid

3. 调用统一支付接口获取预付款id (这里有个小技巧:你如果直接把表单提交到这里,那就傻逼了。 你的服务器会和微信服务器交互2次,等拿到openid,你提交的数据早就被刷掉了,你可以把它放在session或者缓存里面,然后重定向到下面这个页面,等拿到openid后再从session里面拿数据。

官方文档说明:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

1) 设置必传参数,按照签名参数产生签名, 此时参与签名字段有 : appid, mch_id , nonce_str, openid, body , out_trade_no, total_fee, notify_url , trade_type

2) 将必传参数转成xml,createXml方法。

3) 使用xml,请求统一支付接口 https://api.mch.weixin.qq.com/pay/unifiedorder

4) 得到xml格式的返回值结果

5) 将结果转成数组,获取预支付id

4. 使用jsapi调起支付

1. 通过getParameters方法设置必传参数,接口输入数据为json

2. 根据官方demo中jsapi.php 调起支付,得到支付结果

 

注:使用以上方式判断前端返回,res.err_msg 将在用户支付成功后返回 ok,但不保证它绝对可靠。

 

四、可能遇到的问题

1. 返回参数是xml,而不是直接输出success ,这个与微信app支付有区别。

2. 参与签名字段要保证一致,保证前后签名一样。

3. 由于存在重新发送后台通知的情况,因此同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。比如在支付成功后写入了支付日志,那么第二次回调前前判断是否已经有了支付日志,如果有,直接退出不作处理就好了。

4 . 当用户有余额,先用余额支付,剩下的才是微信 , 支付成功时,回调扣去余额

5. 如果同一笔订单号修改多次价格进行支付,第二次支付时,会出现生成预支付订单失败,主要原因是同一笔订单支付时,支付金额不能一样,或者给到第三方的订单号不一样,所以解决方法就是订单号+标志位(比如Z或A)+ 时间戳生成给到的第三方的支付号即可。

 

https://www.cnblogs.com/xuzhengzong/p/7840124.html

用云函数实现微信支付回调的APIv3版本的方法 用云函数实现微信支付回调的APIv3版本的方法,outTradeNo,notifyUrl 阅读详情

相关推荐

电商项目-微信支付(三)支付回调处理

电商项目,支付回调处理

kong7906928的博客 2490

小程序开发调用微信支付以及微信回调地址配置

微信小程序支付,支付回调地址,支付签名生成

chaojiyingxiong的博客 2万+

微信支付Native(一)准备和相关知识

摘要算法,也是常说的散列函数、哈希函数,它能够将任意长度的数据“压缩”成固定长度。而且独一无二的“摘要”字符串,这好像是给这段数据生成了“指纹”。保证信心的完整性不可逆只有算法,没有秘钥,只能加密,不能解密难题友好性想要破解,只能暴力枚举发散性只要对原文进行一点点改变,摘要就会发生剧烈变化抗碰撞性原文不同,计算后的摘要也不同。常见的摘要算法Bob写完信之后,先用摘要算法生成信件原文的摘要(messageDigest)bob将摘要附在信件原文的下面,一起发送给pat。...

爪哇人的博客 1429

java对接微信支付:JSAPI支付成功之“微信回调”

微信支付回调处理

m0_57007247的博客 8976

微信支付】notify_url 回调地址详解

notify_urlnotify_url是在调用微信支付统一下单接口()时需要提供的参数之一。它的主要作用是指定支付结果通知的接收地址。参数名称notify_url类型描述:支付结果通知的回调地址,必须为直接可访问的 HTTPS URL。

lph159的博客 7450

工作笔记——微信支付开发相关知识整理

小程序支付是指商户通过调用微信支付小程序支付接口,在微信小程序平台内实现支付功能;用户打开商家助手小程序下单,输入支付密码并完成支付后,返回商家小程序。

发现问题,面对问题,分析问题,解决问题,总结问题 3798

苍穹外卖模拟小程序微信支付修改过程

c苍穹外卖项目模拟微信支付_模拟支付接口-CSDN博客https://blog.csdn.net/m0_57154617/article/details/133471267?

qq_65330380的博客 1386

面试java高级开发工程师 简历上面写的有对接微信支付 出10道常见的面试题

他们可能在准备面试,需要针对简历中提到的微信支付经验进行准备,所以问题需要覆盖微信支付的不同方面,同时体现高级开发的知识深度。总结下来,问题应该包括流程、安全机制、异常处理、产品类型区别、对账处理、分布式事务、限流防刷、退款处理、底层原理(如HTTPS)、实际项目经验等。首先,微信支付的基本流程是必须的。然后,安全性是关键,微信支付肯定有各种安全措施,比如签名机制、加密传输等,需要设计相关问题。微信支付有不同的产品类型,比如APP支付、小程序支付、H5支付,可能问及它们的区别和使用场景。

m0_50272029的博客 383

微信支付全教程

https://www.cnblogs.com/yimiyan/p/5603657.html

对生活多一点乐趣 2615

传智播客PHP项目实战-微信支付接口

课程目录: 1菜单的处理 2歌曲搜索 4微信支付开发SDK 3微信支付模式和流程 下载地址:http://feixueteam.net/thread-956-1-1.html

gaoke1922的博客 798

微信支付实现

摘要算法就是我们常说的散列函数、哈希函数(Hash Function),它能够把任意长度的数据“压缩”成固定长度、而且独一无二的“摘要”字符串,就好像是给这段数据生成了一个数字“指纹”。作用:保证信息的完整性特性:不可逆:只有算法,没有秘钥,只能加密,不能解密难题友好性:想要破解,只能暴力枚举发散性:只要对原文进行一点点改动,摘要就会发生剧烈变化抗碰撞性:原文不同,计算后的摘要也要不同常见摘要算法:作用:定义统一响应结果,为前端返回标准格式的数据。

KYGALYX的博客 2322

微信支付介绍和接入指引(在线实战!!!!微信直连!!)

③获取平台证书和验签器,商户向微信平台发送请求的时候,反过来微信支付平台也会向我们的商户发送请求,在这个过程中,微信支付平台会用他的私钥进行签名,我们商户会使用微信支付平台的公钥进行验签。商户端发起支付请求,微信端创建支付订单并生成支付二维码链接,微信端将支付二维码返回给商户端,商户端显示支付二维码,用户使用微信客户端扫码后发起支付。负责申请的,包含微信支付平台标识、公钥信息的证书。微信平台接受到商户的发送的请求之后,需要使用商户的公钥进行验签,这里的商户就是我们前后端的这个系统,谷粒学苑。

qq_56947957的博客 7330

Java-微信支付

摘要算法就是我们常说的散列函数、哈希函数(Hash Function),它能够把任意长度的数据“压缩”成固定长度、而且独一无二的“摘要”字符串,就好像是给这段数据生成了一个数字“指纹保证信息的完整性不可逆:只有算法,没有秘钥,只能加密,不能解密难题友好性:想要破解,只能暴力枚举发散性:只要对原文进行一点点改动,摘要就会发生剧烈变化抗碰撞性:原文不同,计算后的摘要也要不同pom</</</统一返回结果类@Data@ApiModelProperty(value = "是否成功")

weixin_67154380的博客 1249

获取微信头像,手机号的步骤,及微信支付

微信支付通过请求接口,弹窗。

qq_61990666的博客 454

前端微信支付流程

首先,用户需要在开发者的系统中下单,完成下单行为后向开发者的服务器发送请求,这个请求能够携带商品信息等数据,在服务器接收到请求时,需要向微信服务器发送请求,以完成一个支付的行为,在发送请求前需要按照微信服务器的规则生成一些必要的参数,微信服务器在接收到请求时,会对签名进行验证,随后会返回一个支付url,开发者服务器需要将链接处理成为二维码供用户扫码支付之后,用户在扫码后微信服务器会验证连接真实性及有效性,在完成支付行为后,微信服务器会以一种异步的形式,向开发者服务器发送请。

m0_67388537的博客 1487

2024年小程序微信支付v3版java代码,支付与退款(1),刚从阿里、头条面试回来

总的来说,面试是有套路的,一面基础,二面架构,三面个人。最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取//放在服务器上的v3证书//处理自己业务逻辑/*** 买课支付通知(api)*/

2301_82243799的博客 587

微信支付之扫码支付相关代码(Java)

最近开发网站过程,需要引入支付过程,第三方支付中最火的莫过于支付宝支付和微信支付,下边借助微信支付官网上的文档,写一下接入微信支付之扫码支付的流程 相对支付宝支付而言,微信支付的开发文档写的相当的low,demo写的一点都不简洁,下边写一下微信扫码支付的过程,这一过程中,需要注意的所涉及的实际业务是怎样的,根据实际情况结合业务进行引入,在进入正式开发之前,要申请微信支付相关内容按照官网的操作进

bjlf_1989的博客 2万+

微信小程序对接微信支付详细教程

小程序 微信支付官方文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_11&index=2 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_0.shtml 前提 在进行对接微信支付之前,我们首先需要将以下几点准备好: 申请APPID 申请商户号 小程序开通微信支付,绑定已经申请好的商户号。登录小程序后台(mp.weixin.qq.com.

Java是世界上最好的语言 4万+

Java 实现微信支付详细教程

Java 实现微信支付详细教程

欢迎阅读程序猿小张的博客~ 1万+
上一篇: linux服务下定时脚本crontab的使用注意事项
下一篇: 九种跨域方式实现原理(完整版)
想念-忘记了
博客等级 码龄9年 64粉丝 61原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值