php提交表单问题 c#网银表单网付通 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 现在是要在PHP提交过这段C#运行才能对接,不是支付宝接口,这个什么网付通是一间广州的公司搞,我公司那些去申请网银接口口,以为中国银联的。其实这个跟快钱差不多。但是这个比快钱还要细。。 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过去这里提交? 自已写了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> <?phpinclude_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");?> IIS发布网站小问题。请教各位。 请教静态页面的头部 在线等,急,邮件发送问题 斑主在吗?我想问一你一个问题? .net 如何编写byte2hex 再问关于身份验证,还是没有搞定 帮帮忙呵 HtmlTable在页面回传时为什么会加载不到值呢? 在一个解决方案中的多个项目怎样传递信息? 按回车转移输入栏焦点的问题 关于DataGrid的超级难题,请高手指教,大家讨论,发表意见就有分 MVC 为什么Album没有命名空间呢 asp.net中ajax进不去ashx,求大神来解决
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过去这里提交?
<!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>
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");
?>