我個人編寫的庫,在我個人網站,小程式等很多地方都在使用中,大家可以搜索小程式 什邡市宅貓君網路工作室 或者到我的網站 store.zhaimaojun.cn 去體驗支付和登錄效果。 本庫主要實現了native pay(二維碼支付)jsapi pay(小程式直接調起支付),需要註意的是這是基於api3 ...
我個人編寫的庫,在我個人網站,小程式等很多地方都在使用中,大家可以搜索小程式 什邡市宅貓君網路工作室 或者到我的網站 store.zhaimaojun.cn 去體驗支付和登錄效果。
本庫主要實現了native pay(二維碼支付)jsapi pay(小程式直接調起支付),需要註意的是這是基於api3的,非api2。
以下演示如何使用:
第一步 搜索安裝ZmjWxApi
打開nuget,直接搜索和安裝ZmjWxApi,如下圖:
第二步 引入namespace和創建支付對象
1 /**引入命名空間*/ 2 using ZmjWxApi; 3 4 /**創建支付對象*/ 5 var npay = new WxPayApi("商戶的id", "商戶API證書序列號", "商戶API證書本地路徑", "微信app的id", "支付結果通知的url");
第三步 微信登錄
1 /**創建用於登錄的對象*/ 2 var wx = new ZmjWxApi.WxUserApi("小程式的id", "小程式的密鑰"); 3 /**網站頁面跳轉到掃碼頁面或者頁面嵌入二維碼*/ 4 var rurl = WxUserApi.GetLoginRedirectUrl("網站應用的id","掃碼完成後跳轉的鏈接","code","snsapi_login","自定義的附加信息");//獲取到這個鏈接後就直接regedit到這個鏈接就可以了 5 /**或者小程式中調用wx.login來獲取用戶的code*/ 6 wx.login({ 7 success(r){ 8 wx.request({ 9 url:'你的登錄api' + r.code, 10 method: 'GET', 11 header: { 12 'content-type': 'application/json', // 預設值 13 }, 14 success(lres: any) { 15 } 16 } 17 }) 18 } 19 }) 20 /**拿到用戶的code後*/ 21 var user = await wx.GetWxUserInfo(code!);//通過用戶的code獲取具體信息 22 var opid = user!.OpenId!;//用戶在小程式或者網站中的openid 23 var nickname = user!.NickName!;//用戶昵稱 24 var icon = user!.Icon!;//用戶的頭像
第四步 調起支付
1 /**調起二維碼支付*/ 2 var url = npay!.NativePlaceOnOrder("商戶自己的訂單編號", "商品名稱和描述", "附加信息", money);//money為訂單總價格,按照分來算,比如:1元=100分,所以money=100標識一元 3 /**將url變成二維碼,掃碼就可以支付了*/ 4 <img src="https://www.zhaimaojun.cn/QrCode/?color=black&code={上面調用方法得到的url}" /> 5 6 /**下麵是小程式小游戲等中使用jsapi調起支付*/ 7 var turl = npay.JsApiPlaceOnOrder("支付者的openid", "商戶自己的訂單編號", "商品名稱和描述", "附加信息", money);//money為訂單總價格,按照分來算 8 var res = WxPayApi.GetApiPaySign("商戶自己的訂單編號", "小程式的appid", turl, "商戶證書的本地地址", "商戶id");//這裡返回的res是一個object,發送給小程式後,小程式上調起支付如: 9 wx.requestPayment({timeStamp:r.data.timestamp,nonceStr:r.data.nonce,package:'prepay_id=' + r.data.prepayid,signType:'RSA',paySign:r.data.sign,success(e){}) 10 /**小程式中調起支付需要註意:需要小程式用戶先登錄並且獲取到openid,其次小程式要綁定到微信商戶上,否則調起jsapi會失敗*/
第五步 處理支付結果通知
1 /**以下代碼在應該在webapi中*/ 2 using var ms = new System.IO.MemoryStream(); 3 await Request.BodyReader.CopyToAsync(ms); 4 ms.Seek(0, SeekOrigin.Begin); 5 var req = Encoding.UTF8.GetString(ms.ToArray()); 6 var msg = WxPayApi.GetTransActionMessageFromContent(req, "wx支付api3的私鑰", out _); 7 //完善交易信息(可根據自己的需要) 8 oder.PayerOpenId = msg.Payer!.Openid!;//支付者的openid 9 oder.Attach = msg.Attach ?? "";//附加數據,也就是下單時寫入的附加內容 10 oder.TradeType = msg.TradeType!;//支付類型,jsapi,二維碼支付等 11 oder.TradeState = msg.TradeState!;//支付結果,一般都是success表示支付成功