支付接口小记

支付系统网关地址: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&notify=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();
        }

 

posted @ 2017-09-06 09:11  AlbertSmith  阅读(299)  评论(0编辑  收藏  举报