微信公众号支付(MVC版本)
一、获取微信支付MCHID,KEY,APPID,APPSecret四个支付关键值.
微信支付商户平台https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F
1.登录微信支付商户平台获取到商户号(MCHID),
2.在"账号中心"栏目下"API安全"栏目里设置API密钥(KEY)
微信公众号:https://mp.weixin.qq.com/
1.登录微信公众在"基本配置"栏获取应用ID(APPID)和应用密钥(APPSecret)
2.在"接口权限"栏目下"网页账号"绑定正式支付的域名(如:××××.net,不要http:和"/"斜杠)
3.在"微信支付"栏目下"开发配置"里面设置公众支付的支付授权目录(如:××××.net/WeChatWeb/)
二、把WxPayAPI添加到制作项目中,在Config.cs文件里修改获取到的MCHID,KEY,APPID,APPSecret四个关键值以及NOTIFY_URL值(NOTIFY_URL是支付授权目录),并在MVC项目里建一个WeChatWeb控制器,里面加上逻辑代码.并传递微信jsapi支付所需的参数.代码示例如下:
后台Action代码
///<summary>
///获取微信支付相关信息
///</summary>
///<returns></returns>
[HttpGet]
publicvirtualActionResultIndex()
{
JsApiPayjsApiPay=newJsApiPay();
OStudentmodel=null;
try
{
//调用【网页授权获取用户信息】接口获取用户的openid和access_token
jsApiPay.GetOpenidAndAccessToken();
//获取微信支付者公共id
jsApiPay.openid=jsApiPay.openid;
stringID=Request["ID"];//如果要获取页面传递过来的值,需修改GetOpenidAndAccessToken()方法里面的代码,加上Request.Url.Query获取参数
model=OStudentSiteService.GetByKey(id).AppendDataasOStudent;
if(model!=null)
{
jsApiPay.total_fee=1;//测试订单金额(1表示分,正式金额要*100)
jsApiPay.Order_ID=model.order_ID;//订单号(自己定义订单号)
}
//JSAPI支付预处理
//调用统一下单,获得下单结果
WxPayDataunifiedOrderResult=jsApiPay.GetUnifiedOrderResult();
//从统一下单成功返回的数据中获取微信浏览器调起jsapi支付所需的参数
varwxJsApiParam=jsApiPay.GetJsApiParameters();//获取到的是json格式字符串
ViewBag.wxJsApiParam=wxJsApiParam;//前台页面js调用
Log.Debug(this.GetType().ToString(),"wxJsApiParam:"+wxJsApiParam);
}
catch(Exceptionex)
{
Response.Write(ex.Message+","+ex.Source);
Response.End();
}
returnView(model);
}
//修改支付方式
[HttpPost]
publicvirtualJsonResultPayMethod()
{
AjaxJsonResultajax=newAjaxJsonResult(){err=true,msg=string.Empty,timeout=3};
stringid=Request.Form["id"];
stringpayMethod=Request.Form["payMethod"];
varmodel=(Project.Core.Models.Model.OStudent)OStudentSiteService.GetByKey(id).AppendData;
model.payMethod=payMethod;//支付方式
OperationResultresult=OStudentSiteService.Modify(model);
if(result.ResultType==OperationResultType.Success)
{
ajax.err=false;
ajax.msg="操作成功";
}
returnJson(ajax);
}
///<summary>
///修改支付状态
///</summary>
///<paramname="userID"></param>
///<returns></returns>
[HttpPost]
publicvirtualstringEditPayStatus(GuiduserID)
{
stringmsg="error";
varmodel=OStudentSiteService.GetByKey(userID).AppendDataasOStudent;
model.Status=(int)X.Project.Site.Models.Enum.PayStatus.Success;//付款成功
OperationResultresult=OStudentSiteService.Modify(model);
if(result.ResultType==OperationResultType.Success)
{
msg="ok";
}
returnmsg;
}
前台Index.chtml视图页面JS代码
<scripttype="text/javascript">
var_wxJsApiParam=eval('(@Html.Raw(ViewBag.wxJsApiParam))');
functioncallpay(){
//选择支付方式
varpayMethod=$("input[name='PayMethod']:checked").val();
if(payMethod==""||payMethod==null){
layer.msg("请选择支付方式",function(){})
returnfalse;
}
$.ajax({
type:"POST",
dataType:"JSON",
url:'@Url.Action("PayMethod","WeChatWeb")',
data:{
payMethod:payMethod,
id:'@Model.ID'
},
success:function(data){
//表示修改支付方式成功
if(!data.err){
//1表示微信支付,则调用微信支付
if(payMethod=="1"){
if(typeofWeixinJSBridge=="undefined"){
if(document.addEventListener){
document.addEventListener('WeixinJSBridgeReady',jsApiCall,false);
}
elseif(document.attachEvent){
document.attachEvent('WeixinJSBridgeReady',jsApiCall);
document.attachEvent('onWeixinJSBridgeReady',jsApiCall);
}
}
else{
jsApiCall();
}
}elseif(payMethod=="2"){
layer.alert('恭喜您,操作成功!',function(){
window.location.href="@Url.Action(MVC.Default.Index())";//操作成功后的跳转页面
});
}
}else{
layer.msg("操作失败",function(){})
returnfalse;
}
}
});
}
//调用微信JSapi支付
functionjsApiCall(){
WeixinJSBridge.invoke('getBrandWCPayRequest',_wxJsApiParam,
function(res){
if(res.err_msg=="get_brand_wcpay_request:cancel"){
layer.msg("已取消支付",function(){});
returnfalse;
}elseif(res.err_msg=="get_brand_wcpay_request:ok"){
//支付成功
//ajax
$.ajax({
type:"POST",
dataType:"text",
url:'@Url.Action("EditPayStatus","WeChatWeb")',
data:{
userID:'@Model.ID'
},
error:function(request){
layer.msg("服务器错误!",function(){});
returnfalse;
},
success:function(data){
window.location.href="@Url.Action(MVC.Default.Index())";//支付成功后跳转的页面
}
});//ajaxend
}
});
}
</script>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。