1.在需要支付的页面先获取code
protected void Page_Load(object sender, EventArgs e)
{
code = "" + HttpContext.Current.Request.Params["code"];
if (string.IsNullOrEmpty(code))
{
string appid = “你的appid”;
var uri = “需要回传参数的url,可以是当前页面”;
string url = GetCodeUrl(appid, uri, null);
Response.Redirect(url);
}
}
public string GetCodeUrl(string Appid, string redirect_uri, string formId)
{
return string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state={2}#wechat_redirect", Appid, redirect_uri, formId);
}
2.写前端支付按钮的js事件
<input type="button" id="btnPay" onclick="pay();" value="立即支付" runat="server" />
<script type="text/javascript">
function getParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
function pay()
{
if (typeof WeixinJSBridge == "undefined") {
alert("请在微信中打开");
return;
}
var code = getParam("code"); //获取 code 回调的页面获取Code
var orderid = ”订单号“;
var totalprice = 订单价格;
var url = "处理参数的后台页面";
$.post(url, { code: code, orderid: orderid, total: totalprice }, function (data) {
if (data.err_msg) {
alert(data.err_msg);
return;
}
//alert(data.appId);
var invokeData = {
"appId": data.appId, //公众号名称,由商户传入
"timeStamp": data.timeStamp, //时间戳,自1970年以来的秒数
"nonceStr": data.nonceStr, //随机串32个字节以下
"package": data.package, //订单详情扩展字符串字符串类型,4096个字节以下是商户将订单信息组成该字符串,具体组成方案参见接口使用说明中package组包帮劣;由商户按照规范拼接后传入;
"signType": data.signType, //微信签名方式:目前只支持MD5
"paySign": data.paySign//微信签名
};
WeixinJSBridge.invoke(
'getBrandWCPayRequest', invokeData,
function (res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
alert("支付完成");
} // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。
else if (res.err_msg &#