微信小程序調起微信支付V3版,后台為C#


小程序端,JS代碼如下:

makeoderinfo:function()//購物車過來的呢??///加個循環

{
var that=this;

var userinfo=app.globalData.users;//這不必須需要的,自己處理業務用

var temopenid=userinfo.openid;//這個必須的,要在微信登錄時,獲取

var temuserid=userinfo.userid;//這不必須需要的,自己處理業務用

var temtuserid=userinfo.Tuserid;//這不必須需要的,自己處理業務用

var goodsdata=app.globalData.selectgoodsdata;//這不必須需要的,自己處理業務用

var temgoodsid=goodsdata.selectgoodsdata.GoodsId;//這不必須需要的,自己處理業務用

var temgoodsname=goodsdata.selectgoodsdata.GoodsName;//這不必須需要的,自己處理業務用

var temshopid=goodsdata.selectgoodsdata.ShopId;//這不必須需要的,自己處理業務用

var temextendata=goodsdata.extendata;//這不必須需要的,自己處理業務用

var jsonstr= JSON.stringify(temextendata)//這不必須需要的,自己處理業務用

var temcouponrecord=[];//優惠記錄//這不必須需要的,自己處理業務用

var temaddressid="AD20210418773000000003";

var temusermess=that.data.usermessge;//用戶留言

var temcount=that.data.count;//這不必須需要的,自己處理業務用

var temexpress_cost=0;//快遞費

var temtotal=that.data.total;//訂單總金額

var temdtotal=that.data.total;//單個商品金額,暫時,還可加算法,單價*優惠——券等

var obj3={//這不必須需要的,自己處理業務用

CouponId:"123456",

Count:2

}

temcouponrecord.push(obj3)//這不必須需要的,自己處理業務用

temcouponrecord.push(obj3)//這不必須需要的,自己處理業務用

var obj1={ //前面的裝成一個類結構

Goodsid:temgoodsid,

Shopid:temshopid,

Goodsname:temgoodsname,

Dtotal:temdtotal*100,

Extendata:temextendata,

Couponrecord:temcouponrecord,

Express_cost:temexpress_cost,

count:temcount

};

 

var temgoodslist=[];//多種商品,做成一下數組,//這不必須需要的,自己處理業務用

temgoodslist.push(obj1)

var temobj2={ //這個是request,提交的數據結構

userid:temuserid,//三大ID

tuserid:temtuserid,//這不必須需要的,自己處理業務用

openid: temopenid,//必須的

description:temgoodsname,//必須的,名稱可隨意負值

addressid:temaddressid,//不是必須的

usermess:temusermess,//不是必須的

// count:temcount,

total:temtotal*100, 必須的,上傳的值,是分,1元的,上傳數值是100

goodslist:temgoodslist//不是必須的

}

return temobj2;

// app.globalData.selectgoodsdata=temobj;

},

//得到V3,統一下單

payment: function() {
var that=this;

var temdata=that.makeoderinfo();

console.log(temdata);

wx.request({
url: '***************/Paycom', //服務器接口地址

data:temdata,

method: 'GET',

header: {
'content-type': 'application/json'

},

success: function (param) {///param為服務器返回數據JSON結構

 

console.log(param);

wx.requestPayment /調用API,調起支付

({

"timeStamp": param.data.timeStamp,

"nonceStr": param.data.nonceStr,

"package": param.data.package,

"signType": "RSA",

"paySign": param.data.paySign,

success:function(res){
console.log(res);

},

fail:function(res){
console.log(res+"88888");

},

complete:function(res){
console.log(res+"9999");

}

}

)

},

fail: function(error) {
console.info(error);

}

})

},

C#后台處理

public Task<ActionResult> Paycom(int userid,string tuserid,string addressid,string usermess, string description, string openid, int total, string goodslist)//下單接口//正在使用
{

List<Recievmodle<Extendata<Extentype>, Couponrecord>> mylist = JsonConvert.DeserializeObject<List<Recievmodle<Extendata<Extentype>, Couponrecord>>>(goodslist);

Recievmodle<Extendata<Extentype>, Couponrecord> recievmodle = mylist[0];
var goodsid = recievmodle.Goodsid;
_logger.LogWarning("000000000000000");

//創建本地訂單數據結構
Order order = new Order();
order.OrderId = "00";
order.UserId = tuserid;
order.AddressId = addressid;
order.Want_Payer_Total = total;
order.AddTime = DateTime.Now;
_orderService.Add(order);
string tzstr1 = "P";
string tzstr2 = order.Id.ToString();
string temorderid = MakeSerial_no(tzstr1, tzstr2);
order.OrderId = temorderid;
_orderService.Save(order);
string backstr = Create_Order_Goods(order.OrderId, tuserid, addressid, usermess, goodslist);//創建order_goods記錄//
///*************前面都是自己的業務處理,只為得到temordeid,,其它都是小程序傳過來的參數*********************************************************************/


return WxPay(description, openid, total, temorderid);去下單///

}
#region//V3微信支付統一下單

public async Task<ActionResult> WxPay(string description, string openid, int total, string temorderid)//v3,微信支付統一下單
{

var url = "https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi";/微信支付統一下單地址
var req = new GenerateOrderModelForWxPay 構建數據結構,要自己去創建一個類的哦
{
appid = Appid,自己的小程序ID
mchid = _mch_id,商戶號,必須的哦
description = description,隨意的貨物名
amount = new WxPayAmountModel /要自己去創建一個類的哦
{
total = total,
currency = "CNY"
},
payer = new WxPayerModel /要自己去創建一個類的哦
{
openid = openid

},
out_trade_no = temorderid,
notify_url = "********************/WxPayCallbackV3" 接收支付返回信息的接口,自己創建
};

string webHost = _hostingEnvironment.WebRootPath;服務器的物理地址
HttpClient client = new HttpClient(new HttpHandler(_mch_id, serialNo, webHost));

var bodyJson = new StringContent(JsonConvert.SerializeObject(req), Encoding.UTF8, "application/json"); //一定要這樣傳遞參數,不然在加密簽名的時候獲取到的參數就是\\u0這種形式的數據了,不是傳遞的這樣的數據了,導致加密的結果不正確
Console.WriteLine(bodyJson);
// var filepath= _hostingEnvironment.WebRootPath + "/arsjkll/apiclient_cert.p12";
var resp = await client.PostAsync(url, bodyJson);
_logger.LogWarning(bodyJson.ToString());
// 讀取統一下單之后的返回結果,這樣讀取出來的直接就是結果,或者錯誤原因,大家一定要這么搞啊!!!多么痛的領悟,會有具體的錯誤信息的。
var respStr = await resp.Content.ReadAsStringAsync();//這里面就包含prepay_id了


var result = JsonConvert.DeserializeObject<JsApiResult>(respStr);
if (!string.IsNullOrEmpty(result.Prepay_Id))
{
//時間戳
// DateTimeOffset dto = new DateTimeOffset(DateTime.Now);
// var unixTime = dto.ToUnixTimeSeconds().ToString();
var timestamp = DateTimeOffset.Now.ToUnixTimeSeconds().ToString();
//隨機數
var nonMun = Guid.NewGuid().ToString("N").Substring(0, 30);
var pck = "prepay_id=" + result.Prepay_Id;
//簽名
string message = $"{Appid}\n{timestamp}\n{nonMun}\n{pck}\n";
var pathfile = _hostingEnvironment.WebRootPath + "/arsjkll/apiclient_cert.p12";

string keyRsa = SignF(message, pathfile, _mch_id);
//var keyRsa = _httpClientFactoryHelper.Sign(message, model.PrivateKey);
//構建JSAPI拉取支付的參數 匿名參數
// string keyRsa = Sign(message);
var requestParam = new
{
appId = Appid,
timeStamp = timestamp,
nonceStr = nonMun,
package = pck,
signType = "RSA",
paySign = keyRsa
};
// ReturnData returnData = ReturnData.ToSuccess(requestParam);
return Content(JsonHelper.Instance.Serialize(requestParam));
}
else
{
return Content("prepay_id獲取失敗+++++++" + respStr);
}

}
#endregion

可以掃小程序體驗


————————————————
版權聲明:本文為CSDN博主「liushiyi」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/liushiyi/article/details/119813550


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM