解决方案 »

  1.   

    现在是要在PHP提交过这段C#运行才能对接,不是支付宝接口,这个什么网付通是一间广州的公司搞,我公司那些去申请网银接口口,以为中国银联的。其实这个跟快钱差不多。但是这个比快钱还要细。。
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using com.gnete;
    using System.IO;
    using System.Runtime.InteropServices;
    using System.Net;
    using System.Web;
    using System.Collections.Specialized;namespace dsf
    {
        class Program
        {
            //private String SERVER_URL = "http://59.41.103.98:9080/PDS/ProcessServlet";
            private String pathPfx = "";
            private String key = "";
            private String password = "123456";
        /**
         * 验证签名信息
         * @throws CryptException 
         */
        private bool verifySign(String strXML)
            {
                this.WriteLogFile("【开始签名的数据】" + strXML); 
                GneteCrypt crypt = new GneteCrypt();
                int iStart = strXML.IndexOf("<SIGNED_MSG>");            int flagLen = 12;
                if (iStart != -1)
                {
                    int end = strXML.IndexOf("</SIGNED_MSG>");
                    int len = end - iStart - flagLen;                string signedMsg = strXML.Substring(iStart + flagLen, len);
                    this.WriteLogFile("【签名块数据】" + signedMsg);                string strMsg = @strXML.Substring(0, iStart) + strXML.Substring(end + 13);
                    this.WriteLogFile("【去签名块后数据】" + strMsg);
                    this.WriteLogFile("【key】" + key);
                     //调用签名包验签接口(原文,签名,公钥路径)
                    string error = "";
                    bool verifyResult = crypt.verifyMsg(signedMsg, strMsg, key, out error);
                    this.WriteLogFile("【验签返回的结果】" + verifyResult.ToString() + "【ERROR】" + error); 
                    if (verifyResult) //strSign, strPlain, strCer, out strErr 签名后信息,原文信息,公钥SN,输出,错误信息
                    {
                        Console.WriteLine("verify ok");
                        return true;
                    }
                    else
                    {
                        Console.WriteLine("【verify error】" + error);
                        return false;
                    }            }
                return true;
            }        private bool verifySign1(String orgText, String strXML)
            {
                GneteCrypt crypt = new GneteCrypt();            //调用签名包验签接口(原文,签名,公钥路径)
                string error = "";
                bool verifyResult = crypt.verifyMsg(orgText, strXML, key, out error);
                this.WriteLogFile("【验签返回的结果】" + verifyResult.ToString() + "【ERROR】" + error);
                if (verifyResult) //strSign, strPlain, strCer, out strErr 签名后信息,原文信息,公钥SN,输出,错误信息
                {
                    Console.WriteLine("verify ok");
                    return true;
                }
                else
                {
                    Console.WriteLine("【verify error】" + error);
                    return false;
                }
            }
            /**
         * 数据签名
         * comment here
         * @param strData
         * @return
         * @throws CryptException 
         * @since gnete-ora 0.0.0.1
         */
        private String signMsg(String strData)
            {
                GneteCrypt crypt = new GneteCrypt();
                String strMsg = strData.Replace("<SIGNED_MSG></SIGNED_MSG>", "");
                String error = "";
                String resultMessage = "";
                Boolean result = crypt.signMsg(strMsg, pathPfx, password, out resultMessage, out error);
                string msg = strData.Replace("<SIGNED_MSG></SIGNED_MSG>", "<SIGNED_MSG>" + resultMessage + "</SIGNED_MSG>");
                this.WriteLogFile(msg);
                return msg;
            }        private String signMsg1(String strData)
            {
                GneteCrypt crypt = new GneteCrypt();
                String error = "";
                String resultMessage = "";
                Boolean result = crypt.signMsg(strData, pathPfx, password, out resultMessage, out error);
                this.WriteLogFile(resultMessage);
                return resultMessage;
            }        private string PostData(string url, string str, string encoding)
            {
                try
                {
                    byte[] data = System.Text.Encoding.GetEncoding(encoding).GetBytes(str);
                    //   准备请求...  
                    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                    req.Method = "Post";
                    req.ContentType = "application/x-www-form-urlencoded";
                    req.ContentLength = data.Length;
                    Stream stream = req.GetRequestStream();
                    //   发送数据  
                    stream.Write(data, 0, data.Length);
                    stream.Close();                HttpWebResponse rep = (HttpWebResponse)req.GetResponse();
                    Stream receiveStream = rep.GetResponseStream();
                    Encoding encode = System.Text.Encoding.GetEncoding(encoding);
                    //   Pipes   the   stream   to   a   higher   level   stream   reader   with   the   required   encoding   format.    
                    StreamReader readStream = new StreamReader(receiveStream, encode);                Char[] read = new Char[256];
                    int count = readStream.Read(read, 0, 256);
                    StringBuilder sb = new StringBuilder("");
                    while (count > 0)
                    {
                        String readstr = new String(read, 0, count);
                        sb.Append(readstr);
                        count = readStream.Read(read, 0, 256);
                    }                rep.Close();
                    readStream.Close();                return sb.ToString();            }
                catch (Exception )
                {
                    return "";
                    // ForumExceptions.Log(ex);
                }
            }           private void TestPayReq()
            {
        //请求报文
                String url = "http://59.41.103.98:333/gzdsf/ProcessServlet";
                String strSendData = "<?xml version=\"1.0\" encoding=\"GBK\"?><GZELINK><INFO><TRX_CODE>100002</TRX_CODE><VERSION>04</VERSION><DATA_TYPE>2</DATA_TYPE><LEVEL>0</LEVEL><USER_NAME>operator</USER_NAME><USER_PASS>1</USER_PASS><REQ_SN>12517936711405</REQ_SN><SIGNED_MSG></SIGNED_MSG></INFO><BODY><TRANS_SUM><BUSINESS_CODE>00600</BUSINESS_CODE><MERCHANT_ID>001053110000001</MERCHANT_ID><SUBMIT_TIME>20090416120000</SUBMIT_TIME><TOTAL_ITEM>2</TOTAL_ITEM><TOTAL_SUM>2</TOTAL_SUM></TRANS_SUM><TRANS_DETAILS><TRANS_DETAIL><SN>0001</SN><E_USER_CODE/><BANK_CODE>105</BANK_CODE><ACCOUNT_TYPE>00</ACCOUNT_TYPE><ACCOUNT_NO>60138270140042110021</ACCOUNT_NO><ACCOUNT_NAME>张三</ACCOUNT_NAME><PROVINCE>广东</PROVINCE><CITY>广州</CITY><BANK_NAME>建行</BANK_NAME><ACCOUNT_PROP>0</ACCOUNT_PROP><AMOUNT>1</AMOUNT><CURRENCY>CNY</CURRENCY><PROTOCOL/><PROTOCOL_USERID/><ID_TYPE/><ID/><TEL/><CUST_USERID/><REMARK>保险理赔</REMARK></TRANS_DETAIL><TRANS_DETAIL><SN>0002</SN><E_USER_CODE/><BANK_CODE>105</BANK_CODE><ACCOUNT_TYPE>00</ACCOUNT_TYPE><ACCOUNT_NO>60138270140042110022</ACCOUNT_NO><ACCOUNT_NAME>李四</ACCOUNT_NAME><PROVINCE>广东</PROVINCE><CITY>广州</CITY><BANK_NAME>建行</BANK_NAME><ACCOUNT_PROP>0</ACCOUNT_PROP><AMOUNT>1</AMOUNT><CURRENCY>CNY</CURRENCY><PROTOCOL/><PROTOCOL_USERID/><ID_TYPE/><ID/><TEL/><CUST_USERID/><REMARK>保险理赔</REMARK></TRANS_DETAIL></TRANS_DETAILS></BODY></GZELINK>";
        String resultStrSendData = this.signMsg(strSendData);
                String strResp = "";
        try 
                {
                    this.WriteLogFile("【开始调用URL,写入URL数据】" + resultStrSendData);
                    strResp = PostData(url, resultStrSendData, "GBK");
                    this.WriteLogFile("【URL返回的结果】"+strResp+"【开始验签】");
                    this.verifySign(strResp);
        } 
                catch (Exception e) {
                    this.WriteLogFile( e.ToString() );
        } 
            }        private void WriteLogFile(String content)
            {
                FileStream fs = new FileStream(System.AppDomain.CurrentDomain.BaseDirectory + @"\dsf.log", FileMode.Append);
                StreamWriter sw = new StreamWriter(fs);
                try
                {
                    //开始写入
                    sw.Write("【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "】" + content + "\r\n");
                    //清空缓冲区
                    sw.Flush();
                }
                catch (Exception e)
                {
                    sw.Close();
                    //关闭流
                    fs.Close();
                    throw new Exception(e.Message);
                }
                finally
                {
                    sw.Close();
                    //关闭流
                    fs.Close();
                }
            }
                     static void Main(string[] args)
            {
                
                Program p = new Program();
         
              
                p.TestPayReq();
                Console.ReadLine();
            }
        }}
    又问那边技术,他那边没FORM表单例子,只给了后台交易接口。那要怎样写前台FORM过去这里提交?
      

  3.   

    自已写了BUTTON提交,现在能显出界面,不过点按钮没反应。想点按钮就跳到那个验证页看看效果。。<%@ Page language="c#" CodeFile="pay.aspx.cs"  AutoEventWireup="false" Inherits="net.pay" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <head >
        <title>无标题页</title>
    <meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </head>
    <body>
        <form id="test" method="post" encType="multipart/form-data" runat="server">
            <asp:Textbox ID="tb" runat="server"></asp:Textbox>
            <br />
            <br />
            <br />
            <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
          <asp:Button id="btn_PostUp" style="Z-INDEX: 117; POSITION: absolute; " runat="server" Width="52px" Text="提交"></asp:Button>
        </form>
    </body>
    </html>
      

  4.   

    <?php
    include_once("config.php"); //连接smarty的配置文件
    include_once("conn.php"); //连接数据库
    $ddnumber=$_GET["ddno"]; //对订单号进行解密
    $array=array(); //定义空数组
    //从数据库中读取指定的订单
    $sql=mysql_query("select * from tb_commodity_order_form where ddnumber='".$ddnumber."'",$conn);
    $info=mysql_fetch_array($sql);
    $yprice=$info["yprice"]; //商品的邮费
    $amount=$info["totalprice"]; //获取总金额
    $amount=str_replace(",","",number_format($amount,2)); //定义金额的格式
    array_push($array,$info); //将数据添加到数组中$smarty->assign("info",$array); //定义输出的数组
    $smarty->assign("amount",$amount); //定义输出金额
    //组织要签名的数据串
    $src="ICBC_PERBANK_B2C1.0.0.0".$infomer["merid"].$infomer["meracct"].$returnaddress."HS".$ddnumber.$amount."0010".$nowtime."0";
    $com=new com('ICBCEBANKUTIL.B2CUtil');
    $rc=$com->init("c:\WINDOWS\user.crt","c:\WINDOWS\user.crt","c:\WINDOWS\user.key","11111111");
    $ssrc=$com->signC($src, strlen($src)); //订单签名数据
    $rc=$com->verifySignC($src,strlen($src), $ssrc, strlen($ssrc));
    $cert=$com->getCert(1); //商城证书公钥$smarty->assign("ssrc",$ssrc);
    $smarty->assign("cert",$cert);$nowtime=date("YmdHis");$sqlmer=mysql_query("select merid,meracct from tb_system where =1",$conn);
    $infomer=mysql_fetch_array($sqlmer);$returnaddress="http://www.cccxy.com/getinfo.asp";
    $smarty->assign("ddnumber",$ddnumber);
    $smarty->assign("nowtime",$nowtime);
    $smarty->assign("returnaddress",$returnaddress);
    $smarty->assign("merid",$infomer["merid"]);
    $smarty->assign("meracct",$infomer["meracct"]);
    $smarty->assign("src",$src);
    require_once("alipay_service.php");
    require_once("alipay_config.php");$array=explode("@",$info["spc"]);
    $arraynum=explode("@",$info["slc"]);
    $arrayinfo=array(); //创建数组
    $arrayinfo_count=array(); //创建数组
    for($i=0;$i<count($array);$i++){
    if($array[$i]!=""){
    $m=$i+1;
    $sqlcart=mysql_query("select * from tb_commodity where tb_commodity_id='".$array[$i]."'",$conn);
    $infocart=mysql_fetch_array($sqlcart); //读取数据库中数据
    array_push($arrayinfo,$infocart[tb_commodity_name]); //将购物商品的名称写入到数组中
    array_push($arrayinfo_count,"商品 $m :$infocart[tb_commodity_name] 数量:$arraynum[$i]"); //将购物商品的数量写入到数组中
    }
    }
    $commodity_name=implode(',',$arrayinfo); //获取商品名称
    $commodity_count=implode(',',$arrayinfo_count); //获取商品描述信息
    $parameter = array(
    "service" => "trade_create_by_buyer", //交易类型,必填实物交易=trade_create_by_buyer(需要填写物流)
    "partner" =>$partner,                                               //合作商户号
    "return_url" =>$return_url,  //同步返回
    "notify_url" =>$notify_url,  //异步返回
    "_input_charset" => $_input_charset,                                //字符集,默认为GBK
    "subject" => $commodity_name,                                                //商品名称,必填
    "body" => $commodity_count,                                           //商品描述,必填
    "out_trade_no" => $ddnumber,                      //商品外部交易号,订单号,必填,每次测试都须修改
    "logistics_fee"=>$yprice,                       //物流配送费用
    "logistics_payment"=>'BUYER_PAY',               //物流配送费用付款方式:BUYER_PAY(买家支付)
    "logistics_type"=>'EXPRESS',                    // 物流配送方式:POST(平邮)、EMS(EMS)、EXPRESS(其他快递)"price" => $amount,                                 //商品单价,必填
    "payment_type"=>"1",                               // 默认为1,不需要修改
    "quantity" => "1",                                 //商品数量,必填
    "show_url" => $show_url,            //商品相关网站
    "seller_email" => $seller_email                //卖家邮箱,必填
    );
    $alipay = new alipay_service($parameter,$security_code,$sign_type);
    $link=$alipay->create_url();
    $smarty->assign("link",$link);$smarty->display("shopping_tjdd.tpl");
    ?>