讨教下,多家店铺的淘宝网店库存管理怎么做做?前提是要允许客人支付宝,微信,花呗等多种方式使用

【干货】微信支付一 概述微信,几乎每个人都在用,应该是国内最高频,占用用户时间最长的软件了,所以当这个巨无霸社交软件加上支付能力,特别是那次春节推出的微信红包收割了大量用户,绑定了大量银行卡,微信支付就像插上了翅膀一样,飞速发展;马云当时还痛心的说,这是微信做的“偷袭珍珠港事件”。本文对微信的发展和业务不做过多介绍,主要从支付系统的产品技术角度做剖析;二 支付业务相关概念1 订单每一笔交易都会有一笔订单,比如我们去吃火锅,我们总得点菜吧,比如点个毛肚,鸭肠什么的,点好后,可能服务员就会在单子上写个第10桌,做个记录,这就是在下单;一样的,支付业务当中,也是需要下单的,比如你在京东买一个肾X,然后选择微信支付,那么这个时候京东就会调用微信支付的接口向微信支付下单,京东就会告诉微信支付,我这里有一笔9998元的交易来了,要用你微信支付来付款;然后微信支付就会用技术手段验证一下是不是京东来了,万一被冒充了呢;然后微信支付就会返给京东一个字符串(一般是数字)单号,当用户付款时候,京东又会拿着这个微信支付返回的单号进行付款;注意:后文主要介绍该段落内容,除刷卡支付场景以外,商户系统先调用统一下单接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码支付、公众号支付、APP支付、小程序支付、H5支付等不同场景生成交易串调起支付;订单按数量维度进行分类的话,可以分成单笔订单和多笔订单;单笔订单是比较好处理的,多笔订单处理对支付系统来说,是一件比较头疼的事情,这里概念介绍就不展开介绍了。2 付款付款对一项支付业务来说,是最核心的业务了;首先按照支付机构来说的话,常用的付款方式就是微信支付或支付宝,但是国内的支付机构一共有两百多家,其他支付机构也能提供像微信支付一样的服务;如果你用京东买东西的话,就会多一个选择,京东支付;如果按照数量维度分类的话,付款跟订单一样,也分成了单笔和多笔付款;一般而言单笔订单对应一次单笔付款;有一种比较特殊情况,一笔订单对应多笔付款,比如一笔肾X的9998元的订单进行拆单,分成两次付款,第一次付款5000元,第二次付款4998元;但是市面上提供拆单服务的比较少,因为拆单业务处理起来相当棘手;如果付款按照交易模式来说的话,可能分成即时到账和担保交易;比如你在菜市场扫了一个大妈的二维码付款,那么这笔交易的款项可以立马结算给这个大妈,这就是即时到账;担保交易,其实也很常见,比如你在京东买一个非自营的肾X,那么这笔款项应该是结算给对应的商户的,但是该款项一般不会立马结算给商户,而是付款人付款后,该款项会进入京东的账上,然后一定时间后,才会结算给商户;其实担保交易模式是支付宝首创,淘宝发展史上,为了解决买卖双方的信任问题,假如你在淘宝买一个东西,款项立马就给了商户,但是商户收到钱后,就不发货给你,把钱卷跑了怎么办,所以支付宝首创了担保交易模式;付款按照支付方式来说的话,可以分成余额支付,快捷支付,网银支付,线下支付,信贷支付等;余额支付,支付宝叫余额,微信支付叫零钱;网银支付,一般用于PC端,企业大额付款场景比如你要付款7万元,一般快捷支付的额度是不够用的;简单来说,网银支付就是你需要跳转到银行界面,使用U盾等验证措施鉴权,然后付款的方式;线下支付,一般不常见,但是支付宝和京东都有,比如说手机支付宝付款时界面有一个大额付款,点击一下就是线下支付,支付宝会提供一个收款账号,当你无论使用何种付款方式,甚至是去银行柜台打款都可以,当你付款到支付宝提供的这个收款账号,支付宝收到款项后就会处理这笔业务;信贷支付,简单来说,支付宝叫花呗,京东叫白条支付;快捷支付,应该是支付业务中最最核心,也是最常见的付款方式了;有支付宝或微信支付使用经验的人应该都知道;快捷支付就两点,第一是绑卡,第二是付款;笔者已经在以前的文章码了几千字重点介绍过快捷支付了,如果付款按照场景来分,不同的支付机构可以包装成不同的产品;以微信支付举例,这也是本文要重点介绍的业务;微信支付分成了公众号支付,刷卡支付,扫码支付,APP支付,H5支付,小程序支付;其中公众号支付刷卡支付对微信支付的发展功不可没,可以说是微信支付赶上支付宝的杀手锏;注意:每个微信号都可以无须添加好友即可向对手方进行付款,还有微信提供的打赏能力,还有发红包,还有转账给好友的方式,这些方式一般仅仅只需要微信自行处理收付款方账户余额增减即可,一般还是免费的;这些都并非上文提到公众号支付,刷卡支付,扫码支付,APP支付,H5支付,小程序支付;本文提到的微信支付仅仅指需要技术服务商接入微信支付,然后进行资金转移的行为,而且这些服务都需要付费的。3 其他概念一般支付机构对外除了提供下单和付款能力外,还会提供退款,退款查询,退款关闭,订单查询,订单关闭,订单撤销,对账等服务;这些能力也很重要,但是本文就不多做介绍了。三 微信公众号支付1 应用场景线上:商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信公众号支付完成下单购买的流程。比如你在京东选了一个肾X,在京东页面点击微信付款时,京东就会调用微信支付能力,先下单,然后会唤起微信公众号支付插件,请自行脑补一下画面,笔者懒,就不截图了,然后用户输入支付密码或者验证指纹等方式完成付款;这种方式就是微信公众号支付;微信公众号支付应该最常见的微信支付方式了。线下:微信公众号支付不单单能用于上文提到的线上支付场景,还可以用于线下扫码场景;其实微信官方提供的扫码支付能力就是为了应用于线下的,但是许多技术服务商并没使用微信扫码支付,而是把公众号包装成了扫码支付;简单来说,你在使用微信扫一扫二维码进行付款的时候,有可能使用的是微信扫码支付能力,也有可能是微信公众号支付能力;微信官方的扫码支付下文专门有介绍,接下来介绍一下被技术服务商使用微信公众号包装的扫码支付能力;上文有举例在京东页面点击微信支付时候会唤起微信公众号支付插件;假如技术服务商自己的网址做成一个二维码,用户打开微信扫一扫后,打开了技术服务商的网址,这个页面,技术服务商做成了输入交易金额样式,这个页面就相当于上文提到的京东选择微信支付这种支付的页面;然后用户输入金额,确认支付后,技术服务商就会调用微信公众号支付,然后弹出公众号支付控件,用户输入支付密码确认付款;不少用户留心的话,可能看到过收钱吧,用户扫描收钱吧的二维码后,打开的页面就是收钱吧输入交易金额的页面;但是收钱吧这种场景下,还有另外一个概念需要介绍一下,就是聚合支付,聚合支付指对支付方式的集合,比如收钱吧就集成了微信支付,支付宝,京东支付,QQ支付等,而且是多码合一,即不管你是使用微信扫一扫,支付宝扫一扫,还是京东扫一扫,QQ扫一扫,收钱吧都是提供的那个二维码;那收钱吧的那个二维码是怎么知道用户是使用微信扫,还是支付宝扫的呢,然后收钱吧才能知道是该调用微信支付,还是该调用支付宝。这种多码合一方式,可先商户打印一个静态的二维码,顾客用app(比如支付宝、微信、百度钱包)扫这个二维码后,进入商户的一个付款页面,输入金额后,完成支付。用户用app扫商户的二维码后,其实是用app浏览器打开到商户的页面, 商户页面通过识别浏览器header中的user-agent来判断是哪个app打开的。 常见App浏览器的user-agent 识别关键字: 支付宝:AlipayClient ;微信:MicroMessenger 2 微信公众号支付开发步骤设置支付目录请确保实际支付时的请求目录与后台配置的目录一致,否则将无法成功唤起微信支付。比如上文提供收钱吧那个输入交易金额的页面目录可能为http://www.shouqianba.com/;在微信商户平台(http://pay.weixin.qq.com)设置您的公众号支付支付目录,设置路径:商户平台-->产品中心-->开发配置。公众号支付在请求支付的时候会校验请求来源是否有在商户平台做了配置,所以必须确保支付目录已经正确的被配置,否则将验证失败,请求支付不成功;目前最多可设置5个设置授权域名开发公众号支付时,在统一下单接口中要求必传用户openid,注意openid只有在公众号支付,小程序支付时候才需要,H5支付,扫码支付,刷卡支付不需要该参数,而获取openid则需要您在公众平台设置获取openid的域名,只有被设置过的域名才是一个有效的获取openid的域名,否则将获取失败; 比如上文提供收钱吧那个输入交易金额的页面的授权目录可能为www:shouqianba.com;目前只能设置一个。获取openid方法微信公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)。如需获取用户的昵称、头像、性别、所在城市、语言和关注时间,还需要用户授权。如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,在支付业务中,最重要的基本信息就是openid了,当然还可以获取其他信息,比如用户的昵称、头像、性别、所在城市、语言和关注时间,但实现支付业务逻辑只需要openid;按照获取用户信息的不同,可以分成用户静默授权和确认同意授权;支付页面中都是用的静默授权方式;具体而言,网页授权流程分为三步:(1)、引导用户进入授权页面同意授权,获取code;授权可能是静默授权,用户无感知;(2)、通过code换取网页授权access_token和openid;注意支付业务中,已经拿到了openid,可以不进行第三步; (3)、通过网页授权access_token和openid获取用户基本信息;第三步需要用户在页面点击确认授权;(1) 获取code在确保微信公众账号拥有授权作用域前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),即按照上文所说,在微信公众号后台设置了授权域名的情况下,引导关注者打开如下页面链接;https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect;该链接中有几个重要参数,这几个参数都由技术服务商确定,appid,公众号的唯一标识,每个公众号申请开通后,微信都会给这个公众号分配一个唯一的标识,即为appid;redirect_uri授权后重定向的回调链接地址;response_type 填写code; wechat_redirect 无论直接打开还是做页面302重定向时候,必须带此参数;scope:应用授权作用域,可传入snsapi_base或者snsapi_userinfo。snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息;如果用户同意授权,可能是静默授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。code说明 :技术服务商在微信提供的跳转地址中拿到code, code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。(2) 通过code获取access_token和openid获取code后,请求以下链接获取access_token和openid,用户无感知: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code该链接中有几个重要参数,appid,公众号的唯一标识,与第一步使用的appid一致;secret,该公众号的密钥,微信后台可以拿到;code,第一步当中微信提供的跳转地址中的code; grant_type填写为authorization_code;请求后,微信会返回access_token和openid;access_token,网页授权接口调用凭证;openid,用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID;这个时候已经拿到了openid,已经可以调用微信下单接口,进行公众号支付,公众号支付要求openid必传,如果是支付业务已经可以不进行第三步了;(3)拉取用户信息(需scope为 snsapi_userinfo)请求方法:https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN该方法中,access_token和openid在第二步已经获得,传入即可;然后微信会返回openid用户的唯一标识;nickname用户昵称;sex用户的性别,值为1时是男性,值为2时是女性,值为0时是未知;province用户个人资料填写的省份;city普通用户个人资料填写的城市;country国家,如中国为CN;headimgurl用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。privilege用户特权信息,json 数组,如微信沃卡用户为(chinaunicom);2 微信公众号支付业务流程步骤(1):用户进入商户网页;步骤(2):线上:用户选择购买,完成选购流程;线下:用户扫一扫商户自做的二维码,进入商户输入交易金额页面,然后用户确认支付后,商户调用微信下单接口,传入交易金额和openid等信息,然后微信支付会返回prepay_id(微信生成的预支付会话标识,用于后续接口getBrandWCPayRequest调用中使用,该值有效期为2小时)步骤(3):商户通过getBrandWCPayRequest接口传入prepay_id调起微信支付控件,用户开始输入支付密码。步骤(4):密码验证通过,支付成功。商户后台得到支付成功的通知。步骤(5):返回商户页面,显示购买成功。该页面由商户自定义。步骤(6):微信支付公众号下发支付凭证。步骤(7):商户公众号下发消息,提示发货成功。该步骤可选。注意:商户也可以把商品网页的链接生成二维码,用户扫一扫打开后即可完成购买支付。交互细节:以下是支付场景的交互细节,请认真阅读,设计商户页面的逻辑:(1)用户打开商户网页选购商品,发起支付,在网页通过JavaScript调用getBrandWCPayRequest接口,发起微信支付请求,用户进入支付流程。(2)用户成功支付点击完成按钮后,商户的前端会收到JavaScript的返回值。商户可直接跳转到支付成功的静态页面进行展示。(3)商户后台收到来自微信开放平台的支付成功回调通知,标志该笔订单支付成功。注:(2)和(3)的触发不保证遵循严格的时序。JS API返回值作为触发商户网页跳转的标志,但商户后台应该只在收到微信后台的支付成功回调通知后,才做真正的支付成功的处理。一笔通过微信公众号进行支付的业务就完成了,其实主要分成三步走,第一步拿到openid,第二步通过openid向微信支付下单,第三步通过第二步下单后获取的单号向微信支付发起付款;当然后续还可能用到退款,退款查询,退款关闭,订单查询,订单关闭,订单撤销,对账等服务。四 刷卡支付1 应用场景主要应用于超市,便利店等场景;简单来说,就是商家使用扫码枪扫描你的付款二维码;步骤1:用户选择刷卡支付付款并打开微信,进入“我”->“钱包”->“收付款”条码界面;步骤2:收银员在商户系统操作生成支付订单;步骤3:商户收银员用扫码设备扫描用户的条码/二维码,商户收银系统提交支付;步骤4:微信支付后台系统收到支付请求,根据验证密码规则判断是否验证用户的支付密码,不需要验证密码的交易直接发起扣款,需要验证密码的交易会弹出密码输入框。支付成功后微信端会弹出成功页面,支付失败会弹出错误提示。(注:用户刷卡条形码规则:18位纯数字,以10、11、12、13、14、15开头)◆ 支付金额>1000元的交易需要验证用户支付密码◆ 用户账号每天最多有5笔交易可以免密,超过后需要验证密码◆ 微信支付后台判断用户支付行为有异常情况,符合免密规则的交易也会要求验证密码注:基于一定的风控策略,存在随时需要验密的可能性。2 刷卡支付业务流程 需要注意,刷卡支付是下单和付款,对微信而言是同时进行的,只需要调用同一个接口进行下单和付款;而微信公众号支付,扫码支付,小程序支付,app支付,h5支付都是下单和付款分开的接口;刷卡支付按照是否需要验证支付密码有两种不同的业务流程;不验证支付密码的刷卡支付流程流程详细说明:(1)收银员在商户收银台生成支付订单,包含交易金额等信息;(2)用户打开微信客户端,点击“我的钱包”,选择“刷卡”,进入条码界面;(3)使用扫码设备读取用户手机屏幕上的条授权码,(注:用户刷卡条形码规则:18位纯数字,以10、11、12、13、14、15开头)(4)扫码设备将读取的信息上传给门店收银台;(5)门店收银台得到支付信息后,向商户收银后台发起支付请求。(6)商户后台对门店收银台的支付请求进行处理,生成签名后调用【提交刷卡支付API】向微信支付系统发起支付请求。注意刷卡支付下单和付款一体的,调用刷卡支付接口,传入扫码枪获取的授权码,同时传入商户自己生成的交易金额,订单详情等其他信息;(7)微信支付系统得到商户侧的支付请求之后会对请求进行验证,验证通过之后会对请求数据进行处理,最后将处理后的支付结果返回给商户收银后台。如果支付成功,微信支付系统会将支付结果返回给商户,同时把支付结果通知给用户(以微信消息的形式通知)。(8)商户收银后台对得到的支付结果进行签名验证和处理,再将支付结果返回给门店收银台。(9)收银员看到门店收银台的支付结果后给用户发货。验证支付密码的刷卡支付业务流程场景交互与免密模式相同,不同的是在商户调用【提交刷卡支付API】发起支付请求之后,微信支付后台提示用户输入密码确认支付,接口同步返回USERPAYING(等待付款)状态,商户系统再轮询调用查询订单接口来确认当前用户是否已经支付成功。以下时序图说明验密支付流程:由于在商户收银后台向微信支付系统发起支付请求之前的流程是完全一样的,所以这里只介绍商户发起支付请求之后的逻辑。(1)商户门店生成订单后,收银台向后台系统发起支付请求。(2)后台调用微信支付【提交刷卡支付API】生成支付交易。(3)微信支付系统对商户请求进行验证,验证通过后判断当前用户需要输入密码。(4)微信支付系统返回USERPAYING状态,商户后台系统将应答结果返回给商户门店收银台。(5)微信支付系统通知用户微信客户端输入密码。(6)用户得到输入密码提示后,确认支付并输入密码。(7)完成密码输入,提交微信支付。(8)微信客户端在用户完成支付后提示微信支付后台系统返回的支付结果,而且微信支付系统会通过短信、微信消息给用户发送支付结果提醒。(9)商户收银台得到USERPAYING状态后,经过商户后台系统调用【查询订单API】查询实际支付结果。(10)如果支付结果仍为USERPAYING,则每隔5秒循环调用【查询订单API】判断实际支付结果,如果用户取消支付或累计30秒用户都未支付,商户收银台退出查询流程后继续调用【撤销订单API】撤销支付交易。异常处理用户遇到支付异常,请按如下说明处理(1)用户微信端弹出系统错误提示框,用户可在交易列表查看交易情况,如果未找到订单,需要商户重新发起支付交易;如果订单显示成功支付,商户收银系统再次调用【查询订单API】查询实际支付结果;(2)用户微信端弹出支付失败提示,例如:余额不足,信用卡失效。需要重新发起支付;(3)当交易超时或支付交易失败,商户收银系统必须调用【撤销订单API】,撤销此交易。(4)由于银行系统异常、用户余额不足、不支持用户卡种等原因使当前支付交易失败,商户收银系统应该把错误提示明确展示给收银员。注意:收银员使用扫码设备读取微信用户刷卡授权码以后,二维码或条码信息传送至商户收银台,由商户收银台或者商户后台调用该接口发起支付。注意1:提交支付请求后微信会同步返回支付结果。当返回结果为“系统错误”时,商户系统等待5秒后调用【查询订单API】,查询支付实际交易结果;当返回结果为“USERPAYING”时,商户系统可设置间隔时间(建议10秒)重新查询支付结果,直到支付成功或超时(建议30秒);注意2:在调用查询接口返回后,如果交易状况不明晰,请调用【撤销订单API】,此时如果交易失败则关闭订单,该单不能再支付成功;如果交易成功,则将扣款退回到用户账户。当撤销无返回或错误时,请再次调用。注意:请勿扣款后立即调用【撤销订单API】,建议至少15秒后再调用。撤销订单API需要双向证书。四 扫码支付1 应用场景用户扫描商户展示在各种场景的二维码进行支付,微信提供的原生扫码支付一般不常见。市面上常见的扫码支付,都是技术服务商自己包装的扫码支付,而运用的能力为微信的公众号支付,支付宝服务窗支付能力;下面介绍的是微信提供的原生扫码支付能力;步骤1:商户根据微信支付的规则,为不同商品生成不同的二维码,展示在各种场景,用于用户扫描购买。步骤2:用户使用微信“扫一扫”扫描二维码后,获取商品支付信息,引导用户完成支付步骤(3):用户确认支付,输入支付密码步骤(4):支付完成后会提示用户支付成功,商户后台得到支付成功的通知,然后进行发货处理。按照二维码时效性分成动态二维码(两小时内有效)和静态二维码(二维码永久有效);2 动态二维码类型的扫码支付商户后台系统调用微信支付【统一下单API】生成预付交易,将接口返回的链接生成二维码,用户扫码后输入密码完成支付交易。注意:该模式的预付单有效期为2小时,过期后无法支付业务流程业务流程说明:(1)商户后台系统根据用户选购的商品生成订单。(2)用户确认支付后调用微信支付【统一下单API】生成预支付交易;(3)微信支付系统收到请求后生成预支付交易单,并返回交易会话的二维码链接code_url。(4)商户后台系统根据返回的code_url生成二维码。(5)用户打开微信“扫一扫”扫描二维码,微信客户端将扫码内容发送到微信支付系统。(6)微信支付系统收到客户端请求,验证链接有效性后发起用户支付,要求用户授权。(7)用户在微信客户端输入密码,确认支付后,微信客户端提交授权。(8)微信支付系统根据用户授权完成支付交易。(9)微信支付系统完成支付交易后给微信客户端返回交易结果,并将交易结果通过微信消息提示用户。微信客户端展示支付交易结果页面。(10)微信支付系统通过发送异步消息通知商户后台系统支付结果。商户后台系统需回复接收情况,通知微信后台系统不再发送该单的支付通知。(11)未收到支付通知的情况,商户后台系统调用【查询订单API】。(12)商户确认订单已支付后给用户发货。3 静态二维码类型的扫码支付该种二维码具有永久性,商户可把该二维码打印后放在店面里;一般适用于固定金额的商品;不常见商户后台系统根据微信支付规则链接生成二维码,链接中带固定参数productid(商户可定义为产品标识或订单号)。用户扫码后,微信支付系统将productid和用户唯一标识(openid)回调商户后台系统(需要设置支付回调URL,须在微信公众号后台设置,例如设置为http://www.shouqianba.com/URL实现的功能:接收用户扫码后微信支付系统回调的productid和openid),商户后台系统根据productid生成支付交易,最后微信支付系统发起用户支付流程。商户支付回调URL设置指引:进入商户平台-->产品中心-->开发配置,进行配置和修改业务流程业务流程说明:(1)商户后台系统根据微信支付规定格式生成二维码(规则见下文),展示给用户扫码。(2)用户打开微信“扫一扫”扫描二维码,微信客户端将扫码内容发送到微信支付系统。(3)微信支付系统收到客户端请求,发起对商户后台系统支付回调URL的调用。调用请求将带productid和用户的openid等参数,并要求商户系统返回交数据包,(4)商户后台系统收到微信支付系统的回调请求,根据productid生成商户系统的订单。(5)商户系统调用微信支付【统一下单API】请求下单,获取交易会话标识(prepay_id)(6)微信支付系统根据商户系统的请求生成预支付交易,并返回交易会话标识(prepay_id)。(7)商户后台系统得到交易会话标识prepay_id(2小时内有效)。(8)商户后台系统将prepay_id返回给微信支付系统。(9)微信支付系统根据交易会话标识,发起用户端授权支付流程。(10)用户在微信客户端输入密码,确认支付后,微信客户端提交支付授权。(11)微信支付系统验证后扣款,完成支付交易。(12)微信支付系统完成支付交易后给微信客户端返回交易结果,并将交易结果通过短信、微信消息提示用户。微信客户端展示支付交易结果页面。(13)微信支付系统通过发送异步消息通知商户后台系统支付结果。商户后台系统需回复接收情况,通知微信后台系统不再发送该单的支付通知。(14)未收到支付通知的情况,商户后台系统调用【查询订单API】。(15)商户确认订单已支付后给用户发货。生成二维码规则二维码中的内容为链接,形式为:weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX其中XXXXX为商户需要填写的内容,商户将该链接生成二维码,如需要打印发布二维码,需要采用此格式。五 APP支付1 应用场景适用于商户在移动端APP中集成微信支付功能。简单来说,就是商户的APP调用微信APP,然后再微信APP内完成支付。商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户APP内,最后展示支付结果。目前微信支付支持手机系统有:IOS(苹果)、Android(安卓)和WP(Windows Phone)。交互细节如下:步骤1:用户进入商户APP,选择商品下单、确认购买,进入支付环节。商户服务后台生成支付订单,签名后将数据传输到APP端;步骤2:用户点击后发起支付操作,进入到微信界面,调起微信支付,出现确认支付界面;步骤3:用户确认收款方和金额,点击立即支付后出现输入密码界面;步骤4:输入正确密码后,支付完成,用户端微信出现支付详情页面;步骤5:回跳到商户APP中,商户APP根据支付结果个性化展示订单处理结果.2 业务流程商户系统和微信支付系统主要交互说明:步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,prepayid,noncestr,timestamp,package。注意:package的值格式为Sign=WXPay步骤4:商户APP调起微信支付。步骤5:商户后台接收支付通知。步骤6:商户后台查询支付结果。六 H5支付1 应用场景H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。主要用于触屏版的手机浏览器请求微信支付的场景。可以方便的从外部浏览器唤起微信支付。提醒:H5支付不建议在APP端使用,如需要在APP中使用微信支付,请接APP支付2 业务流程商户侧要求商户已有H5商城网站,并且已经过ICP备案。通过微信H5支付可以实现在非微信浏览器(如QQ浏览器、谷歌浏览器、Safari等)中使用微信支付的场景。用户侧步骤(1):用户从非微信浏览器的站点导航进入商户H5网页,用户挑选需购买商品,选择微信支付发起购买流程。步骤(2):进入微信客户端确认交易,输入支付密码。步骤(3):支付成功,用户收到支付凭证,同时商户后台收到支付成功的通知。3 业务时序图1、用户在商户侧完成下单,使用微信支付进行支付2、由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB3、统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名“mweb_url”),商户通过mweb_url调起微信支付中间页4、中间页进行H5权限的校验,安全性检查(此处常见错误请见下文)5、如支付成功,商户后台会接收到微信侧的异步通知6、用户在微信支付收银台完成支付或取消支付,返回商户页面(默认为返回支付发起页面)7、商户在展示页面,引导用户主动发起支付结果的查询8,9、商户后台判断是否接到收微信侧的支付结果通知,如没有,后台调用我们的订单查询接口确认订单状态10、展示最终的订单支付结果给用户4 常见问题回调页面正常流程用户支付完成后会返回至发起支付的页面,如需返回至指定页面,则可以在MWEB_URL后拼接上redirect_url参数,来指定回调页面。如,您希望用户支付完成后跳转至https://www.wechatpay.com.cn,则可以做如下处理:假设您通过统一下单接口获到的MWEB_URL=https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096则拼接后的地址为MWEB_URL=https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn需对redirect_url进行urlencode处理由于设置redirect_url后,回跳指定页面的操作可能发生在:1,微信支付中间页调起微信收银台后超过5秒 2,用户点击“取消支付“或支付完成后点“完成”按钮。因此无法保证页面回跳时,支付流程已结束,所以商户设置的redirect_url地址不能自动执行查单操作,应让用户去点击按钮触发查单操作。回跳页面展示时,最好有弹窗让用户点击确认是否完成支付,用户点击后,商户向微信支付进行查询订单状态;5 其它常见错误网络环境未能通过安全验证,请稍后再试1. 商户侧统一下单传的终端IP(spbill_create_ip)与用户实际调起支付时微信侧检测到的终端IP不一致导致的,这个问题一般是商户在统一下单时没有传递正确的终端IP到spbill_create_ip导致,2. 统一下单与调起支付时的网络有变动,如统一下单时是WIFI网络,下单成功后切换成4G网络再调起支付,这样可能会引发我们的正常拦截,请保持网络环境一致的情况下重新发起支付流程商家参数格式有误,请联系商家解决1. 当前调起H5支付的referer为空导致,一般是因为直接访问页面调起H5支付,请按正常流程进行页面跳转后发起支付,或自行抓包确认referer值是否为空
2. 如果是APP里调起H5支付,需要在webview中手动设置referer,如(Map extraHeaders = new HashMap();extraHeaders.put("Referer", "商户申请H5时提交的授权域名");//例如 http://www.baidu.com ))商家存在未配置的参数,请联系商家解决1,当前调起H5支付的域名(微信侧从referer中获取)与申请H5支付时提交的授权域名不一致,如需添加或修改授权域名,请登陆商户号对应的商户平台--"产品中心"--"开发配置"自行配置 2,如果设置了回跳地址redirect_url,请确认设置的回跳地址的域名与申请H5支付时提交的授权域名是否一致支付请求已失效,请重新发起支付统一下单返回的MWEB_URL生成后,有效期为5分钟,如超时请重新生成MWEB_URL后再发起支付请在微信外打开订单,进行支付H5支付不能直接在微信客户端内调起,请在外部浏览器调起IOS:签名验证失败 安卓:系统繁忙,请稍后再试1,请确认同一个MWEB_URL只被一个微信号调起,如果不同微信号调起请重新下单生成新的MWEB_URL 2,如MWEB_URL有添加redirect_url,请确认参数拼接格式是否有误,是否有对redirect_url的值做urlencode,可对比以下例子格式:https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn七 小程序支付1 注意小程序支付与微信公众号支付十分类似,但是小程序支付不需要微信公众号的支付目录和授权域名appid必须为最后拉起收银台的小程序appid; mch_id为和appid成对绑定的支付商户号,收款资金会进入该商户号; trade_type请填写JSAPI(公众号支付); openid为appid对应的用户标识,即使用wx.login接口获得的openid2 业务流程商户系统和微信支付系统主要交互:1、小程序内调用登录接口,获取到用户的openid,api参见公共api【小程序登录API】2、商户server调用支付统一下单,api参见公共api【统一下单API】3、商户server调用再次签名,api参见公共api【再次签名】4、商户server接收支付通知,api参见公共api【支付结果通知API】5、商户server查询支付结果,api参见公共api【查询订单API】八 微信支付能力获取方式分成普通模式和服务商模式特别注意:银行服务商模式马上就不能用了,这也是目前市面上获取微信支付能力的方式,绝大多数做聚合支付的商户都是通过银行获得了微信支付能力,但是根据央行的281号文的第六条来看,以后银行就不能提供微信支付能力了,原文如下:281号文第六条:加强支付业务系统接口管理  各银行、支付机构、清算机构应当建立支付业务系统接口统一管理制度,明确牵头部门,严格业务审批,加强接入单位审核、使用范围、交易信息和资金安全等管理。同时,加大交易监测力度,确保接入单位将支付业务系统接口用于协议约定的范围和用途,并采取有效措施防止支付业务系统接口被用于违法违规用途。各银行、支付机构之间不得相互开放和转接支付业务系统接口,预付卡发卡机构为其受理机构开放支付业务系统接口的,以及中国人民银行另有规定的除外。严禁银行、支付机构、清算机构支持或者变相支持无证机构经营支付业务。1 普通模式最常规的普通模式,适用于有自己开发团队或外包开发商的直连商户收款。开发者申请自己的appid和mch_id,两者需具备绑定关系,以此来使用微信支付提供的开放接口,对用户提供服务2 服务商模式第三方服务商申请自己的服务号appid,并通过该服务号appid申请服务商mch_id,以此获得微信支付服务商能力。再通过服务商mch_id为所服务的特约商户申请创建微信支付sub_mch_id,创建好的sub_mch_id默认和服务商的mch_id建立父子授权关系。以此来使用微信支付提供的开放接口,对特约商户及用户提供服务。同时,微信支付为服务商模式下的每一条“mch_id-sub_mch_id父子授权关系”上,都开放了一些开发配置能力供服务商配置,包括不限于支付授权目录、推荐关注的appid、sub_appid等。拿小程序支付举例,服务商订单由哪个小程序调用js拉起支付,则需要在特约商户开发配置中将该小程序appid配置成sub_appid。每条父子关系上的sub_appid可以为多,用以满足不同的场景需求,但每笔交易只能使用1个。
服务商模式下又分普通服务商和银行服务商两大类,除资金清算能力不同,在账号模型和使用上,普通服务商和银行服务商并无区别。普通服务商发起支付最常规的第三方模式,第三方帮特约商户申请商户号并为他进行支付开发,第三方本身不经手资金,支付成功后资金直接进入特约商户商户号。银行类服务商发起支付有清算资质的银行机构可申请成为微信支付银行类服务商,开通后可通过api创建特约商户号并为其进行支付开发,资金直接进入银行类服务商账户,由银行服务商为特约商户进行资金清算;在此能力的延伸下,银行服务商不仅可直接为其特约商户提供服务,也可间接用同一套模式为渠道商的特约商户提供服务。渠道商可通过银行类服务商基于微信支付接口封装的特约商户创建、子商户开发配置(推荐关注、sub_appid等)、下单接口,来为渠道商下属商户接入微信支付。渠道商部分说明详见:http://wxpay.wxutil.com/download/bank_channel_qa.pdf https://pay.weixin.qq.com/wiki/doc/api/mch_bank.php?chapter=9_21}

我要回帖

更多关于 淘宝网店库存管理怎么做 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信