1.获取用户的openID,在小程序项目index.js里面写入
- Page({
- data: {
- url: '',
- scode:''
- },
- onLoad: function (options) {
- //OpenId
- wx.login({
- //获取code
- success: (res) => {
- wx.request({
- method: "GET",
- url: 'https://xxx.xxx.xxx/GetOpenID.aspx', //仅为示例,并非真实的接口地址
- data: {
- scode: res.code // 使用wx.login得到的登陆凭证,用于换取openid
- },
- header: {
- 'content-type': 'application/json' // 默认值
- },
- success: (res) => {
- if (res.data!='0')
- {
- this.setData({
- sopenid: res.data,
- url: 'https://xxxx.xxx.xxx/?openid=' + res.data
- });
- }
- console.log(this.data.sopenid)
- }
- })
- console.log(res.code) //这里只是为了在微信小程序客户端好查看结果,找寻问题
- }
- });
- }
- });
2.getopenid.aspx
- protected void Page_Load(object sender, EventArgs e)
- {
- try
- {
- var _APP_ID = ""; // 你申请的小程序ID
- var _APP_SECRET = ""; // 小程序的SECRET ,当然这个是可微信公共平台去生成的
-
- var url = string.Format("https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code", _APP_ID, _APP_SECRET, Utils.SafeString(Request["scode"]));
- HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
- request.Method = "Get"; // 这里是定义请求的方式
-
- HttpWebResponse response = request.GetResponse() as HttpWebResponse; //对请求返回的结果进行处理
- Stream io = response.GetResponseStream();
- StreamReader sr = new StreamReader(io, Encoding.UTF8);
- var html = sr.ReadToEnd(); //返回的内容被读取为流
- sr.Close();
- io.Close();
- response.Close();
-
- string key = "\"openid\":\"";
- int stratindex = html.IndexOf(key); //截取字符
-
- if (stratindex != -1) //验证是否存在OpenID ,有时使用过期的登陆凭证,会出现异常
- {
- int endindex = html.IndexOf("\"}", stratindex); // 这里在截取字符时,要注意内容是否和截取的部分相同,否则截取会失败
- string _openid = html.Substring(stratindex + key.Length, endindex - stratindex - key.Length);
- Response.Write(_openid);
- }
- else
- {
- Response.Write("0");
- }
-
- }
- catch (Exception ex)
- {
- Utils.WriteLog(DateTime.Now+"----error:" + ex);
- Response.Write("0");
- }
- }
3.上面已经让我们获取到了用户的openId,接下来就用微信小程序支付的同意下单接口下单,之后根据下单之后返回的prepay_id拼接一个字符串:str = "?timestamp=" +
timestamp+ "&nonceStr=" + wx_nonceStr + "&prepay_id=" +
prepay_id+ "&signType=MD5" + "&paySign=" + get_sign + "&orderId=123456789"; 页面加入:<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script> 使web-view可以使用wx.miniProgram.navigateTo({ url: path });跳转到小程序的页面:
- var params = '<%=str %>';
- var path = '/pages/wxpay/wxpay' + params;
- //通过JSSDK的api使小程序跳转到指定的小程序页面
- wx.miniProgram.navigateTo({ url: path });
4.在小程序里面添加wxpay页面,wxpay.js的代码为
- // pages/wxpay/wxpay.js
- Page({
-
- /**
- * 页面的初始数据
- */
- data: {
-
- },
-
- /**
- * 生命周期函数--监听页面加载
- */
- onLoad: function (options) {
- var that = this;
- //页面加载调取微信支付(原则上应该对options的携带的参数进行校验)
- that.requestPayment(options);
- },
- //根据 obj 的参数请求wx 支付
- requestPayment: function (obj) {
- //获取options的订单Id
- var orderId = obj.orderId;
- console.log('prepay_id=' + obj.prepay_id);
- console.log('prepay_id=' + obj.timestamp);
- //调起微信支付
- wx.requestPayment({
- //相关支付参数
- 'timeStamp': obj.timestamp,
- 'nonceStr': obj.nonceStr,
- 'package': 'prepay_id=' + obj.prepay_id,
- 'signType': obj.signType,
- 'paySign': obj.paySign,
- //小程序微信支付成功的回调通知
- 'success': function (res) {
- //定义小程序页面集合
- var pages = getCurrentPages();
- //当前页面 (wxpay page)
- var currPage = pages[pages.length - 1];
- //上一个页面 (index page)
- var prevPage = pages[pages.length - 2];
- //通过page.setData方法使index的webview 重新加载url 有点类似于后台刷新页面
- //此处有点类似小程序通过加载URL的方式回调通知后端 该订单支付成功。后端逻辑不做赘述。
- prevPage.setData({
- url: "https://xxx.xxxx.xxxxx/PayOk.aspx?orderId=" + orderId,
-
- }),
- //小程序主动返回到上一个页面。即从wxpay page到index page。此时index page的webview已经重新加载了url 了
- //微信小程序的page 也有栈的概念navigateBack 相当于页面出栈的操作
- wx.navigateBack();
- },
- //小程序支付失败的回调通知
- 'fail': function (res) {
- console.log("支付失败");
- console.log(res);
- var pages = getCurrentPages();
- var currPage = pages[pages.length - 1];
- var prevPage = pages[pages.length - 2];
- console.log("准备修改数据");
- prevPage.setData({
- url: "https://xxx.xxx.xxx/PayFial.aspx?orderId=" + orderId,
- }),
- console.log("准备结束页面")
- wx.navigateBack();
- }
- })
- },
-
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面显示
- */
- onShow: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload: function () {
-
- },
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh: function () {
-
- },
-
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom: function () {
-
- },
-
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage: function () {
-
- }
- })
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。