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)咨询

     

  • 相关阅读:
    WCF 第四章 绑定 在多个绑定上暴露一个服务契约
    WCF 第五章 行为 事务跨操作事务流
    WCF 第五章 导出并发布元数据(服务行为)
    WCF 第五章 行为 通过配置文件暴露一个服务行为
    WCF 第五章 不支持会话的绑定的默认并发和实例
    WCF 第五章 并发和实例(服务行为)
    WCF 第五章 行为 总结
    WCF 第四章 绑定 绑定元素
    WCF 第五章 行为 事务之选择一个事务协议OleTx 或者WSAT
    WCF 第四章 绑定 比较各种绑定的性能和可扩展性
  • 原文地址:https://www.cnblogs.com/zhangdw/p/6815411.html
Copyright © 2011-2022 走看看