我地点公司需要开辟一款商城小顺序,内里需要用到微信付出,我担任内里的下单功用,从小顺序端到背景的付出流程都是我本身开辟的,由于我们组没有人有开辟微信付出的履历,许多东西都还不怎么邃晓,然则没办法,只能我本身揣摩,写完以后总以为有bug,然则不晓得该怎么改才适宜,前前后后踩了不少的坑,本身有时间也研讨了一下,改动了好几次以后,我以为现在的版本是最顺畅,平安性也是最高的,我把现在的做法流程纪录一下,供他人参考。
- 首先要拿到收款的微信商户号和付出秘钥
- 确保拿到用户的openid,猎取用户的openid的流程大抵是,在微信端运用wx.login猎取到code,将code传到服务器调换openid,详细的流程可去官方文档检察猎取openid
- 建立一个代付款的定单,获得该定单的单号
- 在服务端挪用微信付出的一致下单接口微信付出一致下单,( 挪用预下单接口的时刻,要传入一个准确的关照地点,字段名称是notify_url,这个地点是我们本身写的接口地点,用于吸收微信付出效果关照,然后更新定单状况 ),举行预下单以后,获得一个prepay_id
- 用获得的prepay_id在js里挪用提议付出微信小顺序付出
- 付出效果,微信会经由过程服务端关照到一致下单的时刻的关照地点,当收到微信付出效果关照以后,需要对吸收到的信息举行署名考证,确保考证经由过程了,才更新定单的状况。
踩坑鸠合:
- 最最先的版本是直接在小顺序微信付出的js的success回调里,吸收到了付出胜利以后,再在js里挪用修正定单状况的接口,如许做实在很不平安,由于他人一旦拿到小顺序的源码,就能够够直接跳过微信付出,直接挪用修正定单付款状况的接口了,而且,假如客户在微信付出完成以后,没有点完成按钮,也不会进入js的success回调内里,所以需要经由过程服务端的关照接口,吸收到付出效果关照以后,再在服务端修正定单付款状况,如许就没有题目了。
- 屡次关照付款效果的题目。付款效果关照,微信会提议屡次,一最先的时刻,我发明统一个定单会有多条一样的付款日记,没找到题目,背面看了微信付出的官方文档以后,才晓得,为了保证能吸收到付出的效果,统一条定单的付出效果会关照屡次,需要开辟者本身举行处置惩罚。
- 付出效果关照的平安性题目。由于付出效果关照吸收的地点是对外开放的,所以一旦地点泄漏出去,有能够会被有心人挪用,根据肯定的参数花样挪用,就能够修正定单的付款状况,形成假的付出关照。所以在收到付出效果关照的时刻,需要对吸收到的数据根据署名的划定规矩举行署名校验,校验经由过程了,才更新定单的付款状况。署名需要用到付出秘钥,只需秘钥没有泄漏,就不会有平安性题目。
- 微信付出的秘钥不要读到前端。由于我们的接口分了很多处所读取,所以在举行微信一致下单的时刻,有把付出秘钥在小顺序的js页面里读出来,再在js里调一致下单的接口,从平安性的角度上来看,如许不够平安,付出秘钥的读取和传输应当只在后端操纵,不应当读到前端,固然读到前端也没有题目,然则能够改的话最好改一下。
附:微信JSAPI付出流程
微信JSAPI付出流程和小顺序的付出流程基础一致,需要注重两点:
- 需要在微信商户平台设置付出目次,只要跳转到了付出目次的地点,才提议微信付出。
- 网页需要猎取openid需要举行一次页面跳转,需要用户对网页受权以后,才猎取到code,猎取到code以后,再运用code猎取到openid,再举行一致下单预付出,其他流程就和小顺序一致。由于在网页里要猎取到openid必需要举行一次页面跳转才猎取到openid,所以我发起能够在定单确认页面,确认好信息以后,先下好待付款的定单,获得定单号以后再跳转,跳转到付出页面的时刻,举行猎取openid的操纵,再举行下面的操纵即可。
猎取openid参考微信网页受权