zoukankan      html  css  js  c++  java
  • 【微信小程序】支付过程详解

    一、介绍

    今天跟大家分享微信小程序集成支付。

    二、分析

    1、小程序支付API

    地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-pay.html#wxrequestpaymentobject

    注释:

    通过接口的查看,我们知道,小程序端要想使用支付的接口,必须要拿到相应的值

    timeStamp:Linux时间戳,可获取本地时间。

    nonceStr:随机字符串,从服务器统一下单接口返回。

    package:统一下单接口返回的prepay_id参数值,发送提交时格式‘prepay_id=*’

    signType:算法签名直接写MD5

    paySign:签名,签名算法。签名必须严格按按照如下规则进行签名,注意一定拼接上key,关于key后面再说。

    举例:paySign = MD5(appId=wxd678efh567hg6787&nonceStr=5K8264ILTKCH16CQ2502SI8ZNMTM67VS&package=prepay_id=wx2017033010242291fcfe0db70013231072&signType=MD5&timeStamp=1490840662&key=qazwsxedcrfvtgbyhnujmikolp111111) = 22D9B4E54AB1950F51E0649E8810ACD6

    2、微信支付接口

    虽然我们已经查看了小程序的支付接口,但是到此时,我们还是不知道这些参数怎么得来,接下来我们选择支付接口中的了解更多信息,查看微信支付接口文档。

    打开后,我们可以看到如下的截图。

    第一步:开发步骤:

    地址:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1

    从上面我们得到的有用信息是:

    1)小程序支付跟JSAPI和JSSDK很相似

    2)统一下单,都需要首先获取到Openid,调用相同的API,通过下面的我们的得知是https://api.mch.weixin.qq.com/pay/unifiedorder

    3)调起支付页面协议,小程序只支持HTTPS,

    4)注意点,支付目录和授权域名,小程序都是无。

    5)小程序的回调函数

    第二步:业务流程

    地址:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=2

    分析上面的时序图,

    1)用户进入小程序,通过小程序发送下单支付请求,到我们的商户系统。

    过程拆解:商户系统可以理解为我们自己的商户服务器,存放我们服务器的代码,这个过程就是,用户发送一个请求到我们自己的服务器,参数就是商品的一些信息。

    2)服务器调用小程序登录API,微信服务器后台返回openid,商户服务器生成订单,调用统一下单API,返回预付单信息(prepay_id),将组合再次签名。

    过程拆解:我们自己的商户服务器,调用微信登录的API,这时候从微信的服务器拿到用户的openid,拿到openid之后,我们自己的服务器要组合生成一条订单,通过过程1发送过来的商品信息,组合生成一条订单(可以参看统一下单API所需的参数),然后调用统一下单API,这时候微信服务器就返回给了我们prepay_id,我们自己的服务器通过再次签名,可以拿到五个参数和sign

    3)返回支付参数(5个参数和sign),小程序中发起下单请求到我们商户服务器,这时候就可把相应的把小程序支付API需要的信息都返回给我们的小程序了。

    4)调用wx.requestPayment,按照规则传入我们需要的信息。

    5)后面就是支付成功失败的回调和显示了。

    三.服务器代码分析

    1、总览

    服务器demo下载地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1

    微信支付开发文档:https://pay.weixin.qq.com/wiki/doc/api/index.html

    证书下载地址:商户平台下载证书,账户中心->账户设置->API安全 下载证书&设置秘钥

    这里的秘钥就是最开始说的key。

    2、代码结构,以PHP为例(WxpayAPI_php_v3)

    SDK目录结构

    |-- cert

    |   |-- apiclient_cert.pem

    |   `-- apiclient_key.pem

    |-- download.php

    |-- index.php

    |-- lib

    |   |-- WxPay.Api.php

    |   |-- WxPay.Config.php

    |   |-- WxPay.Data.php

    |   |-- WxPay.Exception.php

    |   `-- WxPay.Notify.php

    |-- logs

    |   |-- 2015-03-06.log

    |   `-- 2015-03-11.log

    |-- micropay.php

    |-- native.php

    |-- native_notify.php

    |-- notify.php

    |-- orderquery.php

    |-- qrcode.php

    |-- refund.php

    |-- refundquery.php

    |-- unifiedorder.php

    `-- unit

        |-- WxPay.JsApiPay.php

        |-- WxPay.MicroPay.php

        |-- WxPay.NativePay.php

        |-- log.php

        `-- phpqrcode

    目录功能简介

    lib

    API接口封装代码

    WxPay.Api.php 包括所有微信支付API接口的封装

    WxPay.Config.php  商户配置

    WxPay.Data.php   输入参数封装

    WxPay.Exception.php  异常类

    WxPay.Notify.php    回调通知基类

    cert

    证书存放路径,证书可以登录商户平台https://pay.weixin.qq.com/index.php/account/api_cert下载

    unit

    工具类

    unit/phpqrcode

    开源二维码php代码

    logs

    日志文件

    3、配置指南

    MCHID = '1225312702';

    这里填开户邮件中的商户号

    APPID = 'wx426b3015555a46be';

    这里填开户邮件中的(公众账号APPID或者应用APPID或者小程序APPID)

    KEY = 'e10adc3949ba59abbe56e057f20f883e'

    这里请使用商户平台登录账户和密码登录http://pay.weixin.qq.com 平台设置的“API密钥”,为了安全,请设置为32字符串。

    APPSECRET = '01c6d59a3f9024db6336662ac95c8e74'

    改参数在JSAPI支付(open平台账户不能进行JSAPI支付)的时候需要用来获取用户openid,可使用APPID对应的公众平台登录http://mp.weixin.qq.com的开发者中心获取AppSecret。小程序后台获取小程序的AppSecret。

    四、效果

    点击支付后,会弹出二维码,用相应的微信扫描二维码,即可完成支付。

    如有任何问题可加入微信小程序QQ群(418177552)咨询

     

  • 相关阅读:
    python3中的文件操作
    python3网络爬虫实现有道词典翻译功能
    C++11 thread condition_variable mutex 综合使用
    goland scope pattern 设置
    Go 1.11 Module 介绍
    hustOJ 添加 golang 支持
    docker 搭建 hustoj
    最长重复字符串题解 golang
    golang 结构体中的匿名接口
    使用aliyun cli工具快速创建云主机
  • 原文地址:https://www.cnblogs.com/zhangdw/p/6815411.html
Copyright © 2011-2022 走看看