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

用c#开发微信 (22) 微信商城 - 微信支付 (c#源码)

2015-07-30 08:11 567 查看
微信支付有几种支付模式:刷卡支付,扫码支付,公众号支付,APP支付。本文介绍用于在微信商城里的公众号支付。

1.效果图

在商城里购买商品后,到支付页面:





点击上面的确认支付,转到下面微信支付页面:





可关注微信号webuscn或扫描下面二维码,进入微商城体验:





作者:疯吻IT出处:http://fengwenit.cnblogs.com

2.申请微信支付

申请成为公众账号支付商户需要满足以下条件:


1、拥有公众帐号,且为服务号、企业号;

2、公众帐号须通过微信认证;(未认证用户,可先申请微信认证)

3、政府、媒体两大类型的订阅号支持申请微信支付(点此了解更多)。

4、企业号也支持申请微信支付,请在企业号管理平台发起申请。

温馨提示:

1、微信支付商户申请无开通费用及保证金;

2、微信认证资质审核通过后,即可申请微信支付功能;

3、订阅号可先升级为服务号,升级方法点击这里了解。



详细步骤请参考官方文档:

http://kf.qq.com/faq/140225MveaUz150107UVFNjy.html

3.实现

3.1配置

首先要配置支付授权目录:





在你的微商城系统里配置商户信息:





3.2前台代码

这个页面就是上面配置的支付授权目录下面的页面。

先定义一个支付按钮:

[code]<ahref="javascript:void(0);"class="btn"id="getBrandWCPayRequest">确认支付</a>

[/code]

当微信内置浏览器完成内部初始化后会触发WeixinJSBridgeReady事件:

document.addEventListener('WeixinJSBridgeReady',functiononBridgeReady(){


//公众号支付


jQuery('a#getBrandWCPayRequest').click(function(e){




WeixinJSBridge.invoke('getBrandWCPayRequest',{


<%=packageValue%>


},function(res){


varnewurl="/api/payment/wxpay/payResult.aspx?wid="+<%=wid%>+"&otid="+'<%=otid_str%>'+"&openid="+'<%=openid%>'+"";


if(res.err_msg=="get_brand_wcpay_request:ok"){


//支付成功后清空我的订单


$.post("/shop/shopmgr.ashx?myact=clearMyOrder",{wid:'<%=wid%>',openid:'<%=openid%>'},function(data){},"json")




alert("微信支付成功,点击右上角返回!");


window.location.href=newurl;


}elseif(res.err_msg=="get_brand_wcpay_request:cancel"){


alert("您取消了支付!");


}else{


alert(res.err_msg);


alert("您支付失败了!");


}


});




});




WeixinJSBridge.log('yo~ready.');




},false);


使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
因此微信团队建议,当收到ok返回时,向商户后台询问是否收到交易成功的通知,若收到通知,前端展示交易成功的界面;若此时未收到通知,商户后台主动调用查询订单接口,查询订单的当前状态,并反馈给前端展示相应的界面。

网页端接口参数详细列表:

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7

3.3后台代码

主要是生成前台所需要的packageValue:

//先设置基本信息


stringMchId=paymentInfo.partnerId;//"1218574001";//




stringpartnerKey=paymentInfo.partnerKey;//商户支付密钥Key。登录微信商户后台,进入栏目【账户设置】【密码安全】【API安全】【API密钥】




stringnotify_url="http://"+HttpContext.Current.Request.Url.Authority+"/api/payment/wxpay/notify_url.aspx";






stringtimeStamp="";


stringnonceStr="";


stringpaySign="";




stringsp_billno=out_trade_no;


//当前时间yyyyMMdd


stringdate=DateTime.Now.ToString("yyyyMMdd");




if(null==sp_billno)


{


//生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一


sp_billno=DateTime.Now.ToString("HHmmss")+TenPayV3Util.BuildRandomStr(28);


}






//创建支付应答对象


Senparc.Weixin.MP.TenPayLibV3.RequestHandlerpackageReqHandler=newSenparc.Weixin.MP.TenPayLibV3.RequestHandler(null);


//初始化


packageReqHandler.Init();


//packageReqHandler.SetKey(""/*TenPayV3Info.Key*/);




timeStamp=TenPayV3Util.GetTimestamp();


nonceStr=TenPayV3Util.GetNoncestr();




//设置package订单参数


packageReqHandler.SetParameter("appid",uwEntity.AppId);//公众账号ID


packageReqHandler.SetParameter("mch_id",MchId);//商户号


packageReqHandler.SetParameter("nonce_str",nonceStr);//随机字符串


packageReqHandler.SetParameter("body",busiBody);//商品描述


packageReqHandler.SetParameter("attach",wid+"|"+busiBody);


packageReqHandler.SetParameter("out_trade_no",sp_billno);//商家订单号


packageReqHandler.SetParameter("total_fee",((int)(ttFee*100)).ToString());//商品金额,以分为单位(money*100).ToString()


packageReqHandler.SetParameter("spbill_create_ip",Request.UserHostAddress);//用户的公网ip,不是商户服务器IP


packageReqHandler.SetParameter("notify_url",notify_url);//接收财付通通知的URL


packageReqHandler.SetParameter("trade_type",TenPayV3Type.JSAPI.ToString());//交易类型


packageReqHandler.SetParameter("openid",openid);//用户的openId




stringsign=packageReqHandler.CreateMd5Sign("key",partnerKey);


packageReqHandler.SetParameter("sign",sign);//签名




stringdata=packageReqHandler.ParseXML();




varresult=TenPayV3.Unifiedorder(data);




varres=XDocument.Parse(result);


prepayId=res.Element("xml").Element("prepay_id").Value;




//设置支付参数


Senparc.Weixin.MP.TenPayLibV3.RequestHandlerpaySignReqHandler=newSenparc.Weixin.MP.TenPayLibV3.RequestHandler(null);


paySignReqHandler.SetParameter("appId",uwEntity.AppId);


paySignReqHandler.SetParameter("timeStamp",timeStamp);


paySignReqHandler.SetParameter("nonceStr",nonceStr);


paySignReqHandler.SetParameter("package",string.Format("prepay_id={0}",prepayId));


paySignReqHandler.SetParameter("signType","MD5");


paySign=paySignReqHandler.CreateMd5Sign("key",partnerKey);




packageValue="";


packageValue+="\"appId\":\""+uwEntity.AppId+"\",";


packageValue+="\"timeStamp\":\""+timeStamp+"\",";


packageValue+="\"nonceStr\":\""+nonceStr+"\",";


packageValue+="\"package\":\""+string.Format("prepay_id={0}",prepayId)+"\",";


packageValue+="\"signType\":\"MD5\",";


packageValue+="\"paySign\":\""+paySign+"\"";


用c#开发微信系列汇总
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
章节导航