@xiaoyixy
2018-03-07T14:38:04.000000Z
字数 4232
阅读 2141
目录
找到 PayType 表,添加一条支付类型。
如:
PayTypeID | PayTypeName | PayTypeDesc | Period | PaymentPage | PayRate | IsNet | IsPayWhenRecv | OrderNumber | IsOnlineShow | ProductSaleType | isInvoice |
---|---|---|---|---|---|---|---|---|---|---|---|
5 | 微信支付 | 微信支付 | 实时到账 | wcpay | 0.000000 | 1 | 0 | 1 | 1 | 0 | 0 |
找到 PayType_Sequence 表,添加一条记录。(待确认)
如
SysNo | CreateTime |
---|---|
5 | 2018-03-01 10:17:02.927 |
找到 DBC_Config 表, 添加微信扫码支付接入接口认证相关参数字段记录(主要供WcPayMode.cs调用)
* 按照 微信统一下单接口 需要的认证参数新增字段
SysNo | DbcKey | DbcValue | Description | CreateTime | CreateUser | UpdateTime | UpdateUser |
---|---|---|---|---|---|---|---|
sysno | pay_WcPay_appid | XXXXXXX | 安全校验码(Key) | 2018-03-01 16:47:24.000 | 系统管理员 | 2018-03-01 15:43:34.000 | 系统管理员 |
101 | pay_WxPay_key | 1bec493fda794aef4f1556321fbb2257 | 商户平台密钥key | ||||
102 | pay_WxPay_app_id | wxc07579f885b7f399 | 企业号corpid | ||||
103 | pay_WxPay_mch_id | 1246169201 | 微信支付分配的商户号 | ||||
104 | pay_WxPay_notify_url | http://www.tp-linkshop.com.cn/Pay/WcPay_NotifyReturn | 微信异步通知回调接口 |
[Obsolete] 新增微信支付流水记录表 SO_Wcpay, 结构如下
SysNo | SOSysNo | WcpayTradeNo |
---|---|---|
记录编号 | 订单编号 | 流水号 |
// 可能需要维护的数据表:
PayType
? PayType_Sequence
DBC_Config
SO_Wcpay
RO_Refund
netpay
finance_netpay
finance_soincome
finance_soincome_voucher
do_master
ro_master
Waybill_Master
Stock
// 可能需要维护的页面:
../Finance/RefundSingle.aspx?url=退款单维护
../Finance/NetPaySearch_DBC.aspx?url=网上支付查询
(待确认)../Finance/SaleIncomeSearch_DBC.aspx?url=应收款管理
../Sale/ROSearchWX.aspx?url=退货单维护
../Sale/ROSummary_DBC.aspx?url=退货单统计
../Sale/SOManager_DBC.aspx?url=销售单维护
找到
\MVC\MVC.Web\Views\Shopping\_PayType.cshtml
编辑:
// 添加
int wcpaySysNo = 5; // 微信支付的SysNo
// 定位到 if (p.SysNo == onlinePaySysNo)
if (p.SysNo == onlinePaySysNo)
{
...
}
// 修改
else if (p.SysNo == alipaySysNo || p.SysNo == wcpaySysNo)
{
<div class="paytypename">支付宝/微信支付:<span class="c_text3">(@alipayDesc)</span></div>
<div class="paytype-list pr paytypebottom">
<ul>
<li class="paytype-list pr">
<div class="item-radio pa">
<input type="radio" name="sel_pay" class="hidden" id="PayType@(p.SysNo)" @chk value="@p.SysNo" />
<label class="@chk2" style="display: block;" id="lab_@(p.SysNo)" for="PayType@(p.SysNo)" onclick=" DBCMvcShopping.Check.RadioToggle('lab_@(p.SysNo)');DBCMvcShopping.Check.Sel_PayType(@(p.SysNo), '@Html.Raw(p.PayTypeName)', ''); "></label>
</div>
<label for="PayType@(p.SysNo)">
<img width="152" height="37" id="PayTypePic@(p.SysNo)" class="payTypeImg pa @(i == 0 ? "active" : "")" src="@Url.Content(bankIconPath + "alipay.jpg")"/>
</label>
</li>
<li class="paytype-list pr">
<div class="item-radio pa">
<input type="radio" name="sel_pay" class="hidden" id="PayType@(p.SysNo)" @chk value="@p.SysNo" />
<label class="@chk2" style="display: block;" id="lab_@(p.SysNo)" for="PayType@(p.SysNo)" onclick=" DBCMvcShopping.Check.RadioToggle('lab_@(p.SysNo)');DBCMvcShopping.Check.Sel_PayType(@(p.SysNo), '@Html.Raw(p.PayTypeName)', ''); "></label>
</div>
<label for="PayType@(p.SysNo)">
<img width="152" height="37" id="PayTypePic@(p.SysNo)" class="payTypeImg pa @(i == 0 ? "active" : "")" src="@Url.Content(bankIconPath + "wcpay.jpg")"/>
</label>
</li>
</ul>
</div>
}
// 添加样式
ul li.paytype-list {
float: left;
display: inline-block;
width: 227px;
height: 60px;
}
定位到\MVC\MVC.Web\Controllers\
新增类 WcPay.cs
public class WcPay : Pay
{
public override string BuilderForm(GroupShoppingApplicationInfo g)
{
...
}
public override string BuilderForm(SOInfo so)
{
...
}
public override string PayNotifyResult(HttpRequestBase request)
{
...
}
public override bool PayResult(HttpRequestBase request, out string msg)
{
...
}
}
新增类 WcPayMode.cs(主要用来存储构建调用请求 API 的参数), 并完成初始化
public class WcPayMode
{
private string _price;
public string body { get; set; }
public string gateway
{
get { return DbcConfigManager.GetInstance().GetDBCConfigString("pay_WcPay_appid"); }
}
public string price
{
get { return _price; }
set { _price = Convert.ToDecimal(value).ToString("#########0.00"); }
}
// 省略余下部分必要参数
...
}
重写 WcPay.cs 的 BuilderForm 方法, 构建 XML 参数
public override string BuilderForm(SOInfo so)
{
var builder = new StringBuilder();
try
{
var mode = new WcPayMode
{
price = so.GetTotalAmt().ToString(CultureInfo.InvariantCulture),
...
};
var sParaTemp = new SortedDictionary<string, string>
{
{"price", mode.price}
...
};
var helper = new More.NetPayHelper();
// 集成签名
var dics = helper.BuildRequestPara(sParaTemp, mode.key, mode.sign_type, mode.input_charset);
// 生成 HTML 表单
builder.Append(helper.BulidFormHtml(dics, mode.gateway, "get"));
}
catch (BizException)
{
}
catch (Exception)
{
// ignored
}
return builder.ToString();
}
功能:
1. 接收微信支付结果,回复接收情况,通知微信后台系统不再发送该单的支付通知
2. 查询支付状态,作为是否发货的判断依据
主动查询支付状态,作为是否发货的判断依据
* 因为 code_url 有效期为2小时,过期后扫码不能再发起支付
数据库记录插入/更新?