您的位置:首页 > 移动开发 > 微信开发

详细介绍微信小程序使用WEB-VIEW控件进行微信支付

2018-02-03 16:59 736 查看
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 () {

}
})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息