流程
- 配置请求参数
- 请求下单接口
- h5支付时,获取下单返回的mweb_url路径
- 前端获取接口返回的url,请求此路径(手机访问前端界面,pc访问报错:商家格式配置错误)
适用场景
h5网站内,调用微信支付。
前端实例
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript">
function pay() {
$.ajax({
async: false,
cache: false,
type: 'POST',
url: "https://ztcapi.yzsheng.com/Try/WeChatIndex", //请求的action路径
success: function (data) {
alert(data.item);
window.location.href = data.item;
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log(XMLHttpRequest.status);
console.log(XMLHttpRequest.readyState);
console.log(textStatus);
}
});
};
</script>
后端C#实例
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using System.Xml.Linq;
namespace WebApplication1.Common.PayHelper
{
/// <summary>
/// H5微信支付封装
/// </summary>
public static class H5PayHepler
{
static string _pre_order_url = "https://api.mch.weixin.qq.com";//请求域名
static string _appid = "";//公众账号ID
static string _mch_id = "";//商户号
static string _partnerKey = "";//商家私钥,在微信支付中设置
/// <summary>
/// H5微信支付
/// </summary>
/// <returns></returns>
#region 微信支付
public static string WeChatIndex()
{
#region 下单
var _attach = "支付测试";
var _body = "H5支付测试";
var _nonce_str = CreateNonce_str(); //随机字符串
var _notify_url = ""; //回调地址
var _out_trade_no = Guid.NewGuid().ToString("N"); //订单号
var _spbill_create_ip = GetWebClientIp(); //终端ip
var _total_fee = 0.01;//元为单位
var _scene_info = $@"{
{""h5_info"": {
{""type"":""Wap"",""wap_url"": ""{_notify_url}"",""wap_name"": ""{_body}""}}}}"; //场景参数
var _time_start = DateTime.Now.ToString("yyyyMMddHHmmss"); //请求开始时间
var _time_expire = DateTime.Now.AddHours(1).ToString("yyyyMMddHHmmss"); //请求结束时间
var _trade_type = "MWEB"; //请求类型
var pre_order_httpResult = UnifiedOrder(_appid, _attach, _body, _mch_id, _nonce_str, _notify_url, _out_trade_no, _spbill_create_ip, _total_fee,
_trade_type, _scene_info, _time_start, _time_expire); //下单
var pre_order_resultStr = XElement.Parse(pre_order_httpResult);
var pre_order_result_code = pre_order_resultStr.Element("return_code").Value;
var pre_order_result_msg = pre_order_resultStr.Element("return_msg").Value