支付接口小记
支付系统网关地址:http://xxx.com/api/core.php
请求方式:POST提交(或者GET)
编码格式 :统一使用UTF-8
返回数据格式:JSON格式
签名方法:(各类支付签名方法都大同小异)
1、所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA
2、在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算得到sign值。
例如微信主扫签名:
MD5(“account_no=账户编号&body=测试&interface_no=12&money=金额&nonce_str=123456¬ify=www:baidu.com&order_sn=订单号”+密钥)
Md5 结果32位小写
验签方法:
验证调用返回或主动通知签名时,传送的signature参数不参与签名,将生成的签名与该signature值作校验
key :生成商户账号时自动生成
后端拼凑隐藏的form用ajax return前台自动提交:
<script>document.forms['paysubmit'].submit();</script>这个就是自动提交js代码
/// <summary> /// 建立请求,以表单HTML形式构造(默认) /// </summary> /// <param name="sParaTemp">请求参数数组</param> /// <param name="key">加密密钥</param> /// <returns>提交表单HTML文本</returns> public static string buildQueryHtml(SortedDictionary<string, string> sParaTemp, string key) { //签名结果 string mysign = qeurySign(sParaTemp, key); //签名结果与签名方式加入请求提交参数组中 sParaTemp.Add("sign", mysign); StringBuilder sbHtml = new StringBuilder(); sbHtml.Append("<form id='paysubmit' name='paysubmit' action='https://api.xxx.com/api/query.htm' method='post'>"); foreach (KeyValuePair<string, string> temp in sParaTemp) { sbHtml.Append("<input type='hidden' name='" + temp.Key + "' value='" + temp.Value + "'/>"); } //submit按钮控件请不要含有name属性 sbHtml.Append("<input type='submit' value='pay' style='display:none;'></form>"); sbHtml.Append("<script>document.forms['paysubmit'].submit();</script>"); return sbHtml.ToString(); }