prader6

微信小程序支付,带java源码

        先说下这个的背景吧。。。

    本人是做java后端的,自认为还有很大的发展空间(嘻嘻,你懂的),看过一段时间的小程序可是没有支付成功。。。最近公司要做小程序项目,老大让我看下小程序,折腾了好几天,参照着https://blog.csdn.net/zhourenfei17/article/details/77765585 这篇博客,终于弄出来了。。。。。。。

    虽然,效率还有很大提升空间,但是还是在这里做下记录,希望能后来,的人能有些参考。

   上面链接的博文是有java代码的(其实原文中也有小程序端代码),我这里只贴一下小程序端的代码吧。

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// pages/pay/pay.js
Page({
 
  /**
   * 页面的初始数据
   */
  data: {
     
  },
 
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
     
    wx.login({
      success: function (res) {
         
        var service_url = 'https://04f19bb6.ngrok.io/pay/weixin/login?code=' + res.code;//需要将服务器域名添加到小程序的request合法域名中,而且必须是https开头  //这里的地址是我用ngrok 代理本机的地址(不知道ngrok 的同学可以百度下, 很简单)
         
        wx.request({
          url: service_url,
          data: {
            code: res.code
          },
          method: 'GET',
          success: function (res) {
            console.log(res);
            if (res.data != null && res.data != undefined && res.data != '') {
              wx.setStorageSync("openid", res.data.openid);//将获取的openid存到缓存中 
            }
            var openid = res.data.openid;
         
 
            var that = this;
             wx.request({
               url: 'https://04f19bb6.ngrok.io/pay/weixin/wxpay?openid=' + openid ,
              data: {
                 
               },
                 method: 'GET',
                  success: function (res) {
                 console.log(res);
                 console.log(res.data.data.packge)
   
                      //小程序发起微信支付
                      wx.requestPayment({
                        timeStamp: res.data.data.timeStamp,//记住,这边的timeStamp一定要是字符串类型的,不然会报错,我这边在java后端包装成了字符串类型了
                        nonceStr: res.data.data.nonceStr,
                        package: res.data.data.package,
                        signType: 'MD5',
                        paySign: res.data.data.paySign,
                        success: function (event) {
                          // success  
                          console.log(event);
 
                          wx.showToast({
                            title: '支付成功',
                            icon: 'success',
                            duration: 2000
                          });
                        },
                        fail: function (error) {
                          // fail  
                          console.log("支付失败")
                          console.log(error)
                        },
                        complete: function () {
                          // complete  
                          console.log("pay complete")
                        }
                      });
                     
                    
               }
             });
          }
        });
         
      }
    });
  },
 
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
 
  },
 
  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
 
     
  },
 
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
 
  },
 
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
 
  },
 
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
 
  },
 
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
 
  },
 
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
 
  },
 
  
 
})

 

  小程序端的代码我略微做出了写改正就是,把 博主原来的

doWxPay(res.data)这个函数直接写在的 onload()函数中。
 其他需要注意的地方就是,小程序我新建了一个pay 的page,在app.json中把它放在了最上面,所以可以直接调用到该方法。。
  
 期间遇到的写bug:
  1 注意商户的支付秘钥和小程序的秘钥是不同的,注意在java代码中填写正确。
 2 其他的坑就是在返回参数的时候少写=   调用微信 支付借口失败,显示没有支付金额。。其实是
"prepay_id="  要带等号。

 

posted on   prader6  阅读(649)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)

导航

统计

点击右上角即可分享
微信分享提示