在小商店 扫商店的微信支付二维码并完成支付的过程中 发生了什么

请问 在小商店 扫商店的微信支付二维码并完成支付的过程中,

1、支付二维码包含哪些信息,
2、手机端微信扫码并确认和完成支付的过程中,手机端微信和微信服务器后台做了哪工作

支付二维码包含:商户号,订单号,金额,商品描述,时间戳,签名
支付流程:
1、用户在商户侧完成下单,使用微信支付进行支付

2、由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB

3、统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名“mweb_url”),商户通过mweb_url调起微信支付中间页

4、中间页进行H5权限的校验,安全性检查(此处常见错误请见下文)

5、如支付成功,商户后台会接收到微信侧的异步通知

6、用户在微信支付收银台完成支付或取消支付,返回商户页面(默认为返回支付发起页面)

7、商户在展示页面,引导用户主动发起支付结果的查询

8,9、商户后台判断是否接收到微信侧的支付结果通知,如没有,后台调用我们的订单查询接口确认订单状态

10、展示最终的订单支付结果给用户

img

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7403451
  • 你也可以参考下这篇文章:动态二级下拉框联动(二级数据从数据库中获取)
  • 除此之外, 这篇博客: 小程序页面传值、页面与组件通信方式总结中的 二.页面与组件通信 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在开发中,很多页面中会使用相同的组件,这时可以将具有相同信息的部分封装成一个组件,方便开发中调用。在调用中可能会涉及到数据的传递问题,例如页面与组件,组件与组件直接的数据传递。

    首先看看页面与组件直接的数据传递。

        1. 组件需要获取页面传递数据, 可以使用组件的属性来传递值

        2. 页面需要获取组件中修改的数据, 可以使用组件中的事件触发页面中定义的事件来获取

    第一、组件获取页面中数据

      先创建一个自定义组件test-component

    <!--components/test-component/test-component.wxml-->
    <view>
      <input class=‘new-name‘ placeholder=‘请输入名字‘ bindinput="bindInputFunc" value=‘{{inputValue}}‘></input>
      <button class=‘btn‘ size=‘mini‘ bind:tap=‘search‘>搜索</button>
      <view>搜索记录:</view>
      <block wx:for=‘{{records}}‘ wx:for-index="index" wx:for-item="record">
        <view class=‘record‘>{{record}}</view>
      </block>
    </view>

    第一、在组件test-component.js中定义一个属性

    // components/test-component/test-component.js
    Component({
      /**
       * 组件的属性列表
       */
      properties: {
        namesData: {
          type:Array,
          value:[],
          observer: function (newVal, oldVal, changedPath) {
            // 属性被改变时执行的函数(可选),也可以写成在methods段中定义的方法名字符串, 如:‘_propertyChange‘
            // 通常 newVal 就是新设置的数据, oldVal 是旧数据
            console.log(newVal);
            console.log(oldVal);
            this.setData({records:newVal})
          }
        }
      },
    
      /**
       * 组件的初始数据
       */
      data: {
        inputValue:‘‘,
        records: []
      },
    
      /**
       * 组件的方法列表
       */
      methods: {
        //输入框输入事件
        bindInputFunc: function (e) {
          this.setData({
            inputValue: e.detail.value
          })
        },
    
        /**
         * 组件搜索按钮事件
         */
        search: function() {
          let records = [...this.data.records];
          records.push(this.data.inputValue);
    
          this.setData({ records, inputValue: ‘‘ })
    
          this.triggerEvent("search", { records});
    
          /*
          var myEventDetail = {} // detail对象,提供给事件监听函数
          var myEventOption = {} // 触发事件的选项
          this.triggerEvent(‘myevent‘, myEventDetail, myEventOption)
          
          触发事件的选项包括:
              选项名            类型        是否必填        默认值        描述
              bubbles           Boolean       否           false        事件是否冒泡
              composed         Boolean       否           false        事件是否可以穿越组件边界,为false时,事件将只能在引用组件的节点树上触发,不进入其他任何组件内部
              capturePhase      Boolean       否           false         事件是否拥有捕获阶段
    
           */
          
        }
      }
    })
      
    {
     "usingComponents":{
      "test-component":"/components/test-component/test-component"
        }
    }
    <test-component namesData=‘{{names}}‘ bind:search=‘homeSearch‘></test-component>
    // pages/home/home.js
    Page({ 
      /**
       * 页面的初始数据
       */
      data: {
        names:[‘aaaa‘,‘bbbb‘,‘cccc‘]
      },
    /**
       * 搜索的点击事件
       */
      homeSearch: function(e) {
        console.log(e.detail); // 自定义组件触发事件时提供的detail对象
      }
     
    })

  • 您还可以看一下 翟东平老师的微信公众平台企业号实战项目开发_校信通课程中的 1开篇小节, 巩固相关知识点