微信小程序调起微信支付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