0%

微信支付

万维网(英语:World Wide Web)亦作WWW、Web,是一个透过互联网访问的,由许多互相链接的超文本组成的系统。英国科学家蒂姆·伯纳斯-李于1989年发明了万维网。1990年他在瑞士CERN的工作期间编写了第一个网页浏览器。网页浏览器于1991年在CERN以外发行,1991年1月最先向其他研究机构发行,并于1991年8月在互联网上向公众开放。万维网是信息时代发展的核心,也是数十亿人在互联网上进行交互的主要工具。网页主要是文本文件格式化和超文本置标语言(HTML)。除了格式化文字之外,网页还可能包含图片、影片、声音和软件组件,这些组件会在用户的网页浏览器中呈现为多媒体内容的连贯页面。万维网并不等同互联网,万维网只是互联网所能提供的服务其中之一,是靠着互联网运行的一项服务。

一、分类

  1. 付款码支付
  2. JSAPI支付
  3. 小程序支付
  4. Native支付
  5. APP支付
  6. H5支付

二、例子

①Native支付流程

  1. 模式一:商户后台系统根据微信支付规则链接生成二维码,链接中带固定参数productid(可定义为产品标识或订单号)。用户扫码后,微信支付系统将productid和用户唯一标识(openid)回调商户后台系统(需要设置支付回调URL),商户后台系统根据productid生成支付交易,最后微信支付系统发起用户支付流程。
    • 业务流程时序图

扫码支付模式一

  • 支付流程
    • 商户后台系统根据微信支付规定格式生成二维码(规则见下文),展示给用户扫码。
    • 用户打开微信“扫一扫”扫描二维码,微信客户端将扫码内容发送到微信支付系统。
    • 微信支付系统收到客户端请求,发起对商户后台系统支付回调URL的调用,调用请求将带productid和用户的openid等参数,并要求商户系统返回交数据包
    • 商户后台系统收到微信支付系统的回调请求,根据productid生成商户系统的订单。
    • 商户系统调用微信支付【统一下单API】请求下单,获取交易会话标识(prepay_id)
    • 微信支付系统根据商户系统的请求生成预支付交易,并返回交易会话标识(prepay_id)。
    • 商户后台系统得到交易会话标识prepay_id(2小时内有效)。
    • 商户后台系统将prepay_id返回给微信支付系统。返回数据见”本节3.2回调数据输出参数”
    • 微信支付系统根据交易会话标识,发起用户端授权支付流程。
    • 用户在微信客户端输入密码,确认支付后,微信客户端提交支付授权。
    • 微信支付系统验证后扣款,完成支付交易。
    • 微信支付系统完成支付交易后给微信客户端返回交易结果,并将交易结果通过短信、微信消息提示用户。微信客户端展示支付交易结果页面。
    • 微信支付系统通过发送异步消息通知商户后台系统支付结果。商户后台系统需回复接收情况,通知微信后台系统不再发送该单的支付通知。
    • 未收到支付通知的情况,商户后台系统调用【查询订单API】。
    • 商户确认订单已支付后给用户发货。
  1. 模式二:商户后台系统先调用微信支付的统一下单接口,微信后台系统返回链接参数code_url,商户后台系统将code_url值生成二维码图片,用户使用微信客户端扫码后发起支付。注意:code_url有效期为2小时,过期后扫码不能再发起支付。
    • 业务流程时序图

扫码支付模式二

  • 支付流程
    • 商户后台系统根据用户选购的商品生成订单。
    • 用户确认支付后调用微信支付【统一下单API】生成预支付交易;
    • 微信支付系统收到请求后生成预支付交易单,并返回交易会话的二维码链接code_url。
    • 商户后台系统根据返回的code_url生成二维码。
    • 用户打开微信“扫一扫”扫描二维码,微信客户端将扫码内容发送到微信支付系统。
    • 微信支付系统收到客户端请求,验证链接有效性后发起用户支付,要求用户授权。
    • 用户在微信客户端输入密码,确认支付后,微信客户端提交授权。
    • 微信支付系统根据用户授权完成支付交易。
    • 微信支付系统完成支付交易后给微信客户端返回交易结果,并将交易结果通过短信、微信消息提示用户。微信客户端展示支付交易结果页面。
    • 微信支付系统通过发送异步消息通知商户后台系统支付结果。商户后台系统需回复接收情况,通知微信后台系统不再发送该单的支付通知。
    • 未收到支付通知的情况,商户后台系统调用【查询订单API】。
    • 商户确认订单已支付后给用户发货。

②JSAPI支付

  1. 设置支付目录:请确保实际支付时的请求目录与后台配置的目录一致(现在已经支持配置根目录,配置后有一定的生效时间,一般5分钟内生效),否则将无法成功唤起微信支付。
  2. API支付时,在统一下单接口中要求必传用户openid,而获取openid则需要您在公众平台设置获取openid的域名,只有被设置过的域名才是一个有效的获取openid的域名,否则将获取失败。
  3. 业务流程时序图
    jsapi

三、important

①统一下单接口 https://api.mch.weixin.qq.com/pay/unifiedorder

字段名 变量名 必填 类型 示例值 描述
公众账号ID appid String(32) wxd678efh567hg6787 微信支付分配的公众账号ID(企业号corpid即为此appId)
商户号 mch_id String(32) 1230000109 微信支付分配的商户号
随机字符串 nonce_str String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 随机字符串,长度要求在32位以内。推荐随机数生成算法
签名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6 通过签名算法计算得出的签名值,详见签名生成算法
商品描述 body String(128) 腾讯充值中心-QQ会员充值 商品简单描述,该字段请按照规范传递,具体请见参数规定
商户订单号 out_trade_no String(32) 20150806125346 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-
标价金额 total_fee Int 88 订单总金额,单位为分,详见支付金额
终端IP spbill_create_ip String(64) 123.12.12.123 支持IPV4和IPV6两种格式的IP地址。调用微信支付API的机器IP
通知地址 notify_url String(256) http://www.weixin.qq.com/wxpay/pay.php 异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。
交易类型 trade_type String(16) JSAPI JSAPI -JSAPI支付
NATIVE -Native支付
APP -APP支付 说明详见参数规定
设备号 device_info String(32) 013467007045764 自定义参数,可以为终端设备号(门店号或收银设备ID),PC网页或公众号内支付可以传”WEB”
签名类型 sign_type String(32) MD5 签名类型,默认为MD5,支持HMAC-SHA256和MD5。
商品详情 detail String(6000) 商品详细描述,对于使用单品优惠的商户,改字段必须按照规范上传,详见“单品优惠参数说明”
附加数据 attach String(127) 深圳分店 附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用。
标价币种 fee_type String(16) CNY 符合ISO 4217标准的三位字母代码,默认人民币:CNY,详细列表请参见货币类型
交易起始时间 time_start String(14) 20091225091010 订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
交易结束时间 time_expire String(14) 20091227091010 订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。订单失效时间是针对订单号而言的,由于在请求支付的时候有一个必传参数prepay_id只有两小时的有效期,所以在重入时间超过2小时的时候需要重新请求下单接口获取新的prepay_id。其他详见时间规则 建议:最短失效时间间隔大于1分钟
订单优惠标记 goods_tag String(32) WXG 订单优惠标记,使用代金券或立减优惠功能时需要的参数,说明详见代金券或立减优惠
商品ID product_id String(32) 12235413214070356458058 trade_type=NATIVE时,此参数必传。此参数为二维码中包含的商品ID,商户自行定义。
指定支付方式 limit_pay String(32) no_credit 上传此参数no_credit–可限制用户不能使用信用卡支付
用户标识 openid String(128) oUpF8uMuAJO_M2pxb1Q9zNjWeS6o trade_type=JSAPI时(即JSAPI支付),此参数必传,此参数为微信用户在商户对应appid下的唯一标识。openid如何获取,可参考【获取openid】。企业号请使用【企业号OAuth2.0接口】获取企业号内成员userid,再调用【企业号userid转openid接口】进行转换
电子发票入口开放标识 receipt String(8) Y Y,传入Y时,支付成功消息和支付详情页将出现开票入口。需要在微信支付商户平台或微信公众平台开通电子发票功能,传此字段才可生效
场景信息 scene_info String(256)

②支付结果通知

应用场景:支付完成后,微信会把相关支付结果及用户信息通过数据流的形式发送给商户,商户需要接收处理,并按文档规范返回应答。

  1. 同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。
  2. 后台通知交互时,如果微信收到商户的应答不符合规范或超时,微信会判定本次通知失败,重新发送通知,直到成功为止(在通知一直不成功的情况下,微信总共会发起10次通知,通知频率为15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h - 总计 24h4m),但微信不保证通知最终一定能成功。
  3. 在订单状态不明或者没有收到微信支付结果通知的情况下,建议商户主动调用微信支付【查询订单API】确认订单状态。