叮当电竞为什么不能用支付宝
可以使用。叮当接入支付宝的方法:
1、请登录支付宝开放平台,应用信息。
2、点击应用环境,查看合作伙伴密钥详情,此处的合作伙伴身份PID,即商户PID。
3、查看开发者公钥及支付宝公钥具体密钥说明请查看文档,RSA私钥及公钥生成。
4、需注意公钥要在开发者公钥处修改完毕。
5、最后填写服务器异步通知页面路径即回调地址用于支付结果获取和处理这里有就填,没有可不填写以上就是需要填写在叮当后台的应用信。
require_once(app_path() "/Tool/Alipay/alipayconfigphp");
require_once(app_path() "/Tool/Alipay/lib/alipay_submitclassphp");
//返回格式
$format = "xml";
//必填,不需要修改
//返回格式
$v = "20";
//必填,不需要修改
//请求号
$req_id = date('Ymdhis');
//必填,须保证每次请求都是唯一
//req_data详细信息
//服务器异步通知页面路径
$notify_url = "http://" $_SERVER['HTTP_HOST'] '/service/pay/ali_notify';
//需http://格式的完整路径,不允许加id=123这类自定义参数
//页面跳转同步通知页面路径
$call_back_url = "http://" $_SERVER['HTTP_HOST'] '/service/pay/ali_result';
//需http://格式的完整路径,不允许加id=123这类自定义参数
//http://127001:8800/WS_WAP_PAYWAP-PHP-UTF-8/call_back_urlphp
//操作中断返回地址
$merchant_url = "http://" $_SERVER['HTTP_HOST'] '/service/pay/ali_merchant';
//用户付款中途退出返回商户的地址。需http://格式的完整路径,不允许加id=123这类自定义参数
//卖家支付宝帐户
$seller_email = 'ajjnae2770@sandboxcom';
//必填
//商户订单号
$out_trade_no = $_POST['order_no'];
//商户网站订单系统中唯一订单号,必填
Log::info('out_trade_no:' $out_trade_no);
//订单名称
$subject = $_POST['name'];
//必填
//付款金额
$total_fee = $_POST['total_price'];
//必填
//请求业务参数详细
$req_data = '<direct_trade_create_req><notify_url>' $notify_url '</notify_url><call_back_url>' $call_back_url '</call_back_url><seller_account_name>' $seller_email '</seller_account_name><out_trade_no>' $out_trade_no '</out_trade_no><subject>' $subject '</subject><total_fee>' $total_fee '</total_fee><merchant_url>' $merchant_url '</merchant_url></direct_trade_create_req>';
//必填
//
//构造要请求的参数数组,无需改动
$para_token = array(
"service" => "alipaywaptradecreatedirect",
"partner" => trim($alipay_config['partner']),
"sec_id" => trim($alipay_config['sign_type']),
"format" => $format,
"v" => $v,
"req_id" => $req_id,
"req_data" => $req_data,
"_input_charset" => trim(strtolower($alipay_config['input_charset']))
);
//建立请求
$alipaySubmit = new \AlipaySubmit($alipay_config);
//报错点
$html_text = $alipaySubmit->buildRequestHttp($para_token);
//URLDECODE返回的信息
$html_text = urldecode($html_text);
//解析远程模拟提交后返回的信息
$para_html_text = $alipaySubmit->parseResponse($html_text);
//获取request_token
$request_token = $para_html_text['request_token'];
/根据授权码token调用交易接口alipaywapauthauthAndExecute/
//业务详细
$req_data = '<auth_and_execute_req><request_token>' $request_token '</request_token></auth_and_execute_req>';
//必填
//构造要请求的参数数组,无需改动
$parameter = array(
"service" => "alipaywapauthauthAndExecute",
"partner" => trim($alipay_config['partner']),
"sec_id" => trim($alipay_config['sign_type']),
"format" => $format,
"v" => $v,
"req_id" => $req_id,
"req_data" => $req_data,
"_input_charset" => trim(strtolower($alipay_config['input_charset']))
);
//建立请求
$alipaySubmit = new \AlipaySubmit($alipay_config);
$html_text = $alipaySubmit->buildRequestForm($parameter, 'get', '确认');
return $html_text;
}
到支付宝官网,下载支付宝集成开发包,看懂里面的关键代码
由于android设备一般用的都是无线支付,所有我们申请的就是支付宝无线快捷支付接口。
如果链接失效,你可以到支付宝官网商家服务模块中找到 快捷支付(无线)这个服务。
下载集成开发包,解压发现里面有客户端的demo即说明文档,在客户端的demo中找到Android_SDK,这个就是你要用到的支付宝接口及demo。
把demo(alipay_sdk_demo)和(alipay_lib)导入到你的eclipse里面,然后你可以试着运行一遍demo(alipay_sdk_demo),只要把这个demo搞懂了,你就会调用这个支付宝接口了。至于到时候如何集成到你的项目里面,文档上说明很详细,按着文档上一步一步来就行了。我的建议是先把这个demo弄懂再设计你的项目,看看调用接口时需要哪些数据,这样也有利于你一开始设计数据。
下面来简单的介绍下接口demo里面的结构。
你打开项目会发现里面有5个类。
其中,Base64java、Resultjava、Rsajava这3个类不需要动,需要用到的,到时候直接放到你项目里面就行了,如果你想了解下它们你也可以看看。重点就是ExternalPartnerjava和Keysjava这两个类。先来说说Keysjava类吧。
Keyjava这个类等你申请支付宝签约成功后再配置,先放在这不用管,如何配置我注释里面已经的很明白了。
然后是ExternalPartnerjava这个类。这个类其实也很简单,你运行这个demo会发现就是一个listview里面加载的很多商品信息,点击一款商品就调用会支付宝接口(因为Keyjava未配置,所以你现在估计调用不成功)。我们找到listview的点击事件的方法就找到调用支付宝的入口了
kage comalipayandroidmspdemo;
import javaioIOException;
import comalipayandroidappsdkAliPay;
public class ExternalPartner extends Activity implements OnItemClickListener,
OnClickListener {
public static final String TAG = "alipay-sdk";
private static final int RQF_PAY = 1;
private static final int RQF_LOGIN = 2;
private EditText mUserId;
private Button mLogon;
@Override
public void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutexternal_partner);
initProducts();
initListView();
}
/
(non-Javadoc)
@see androidappActivity#onCreateOptionsMenu(androidviewMenu)
/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menuadd(MenuNONE, MenuFIRST, 1, "快速登录");
return true;
}
/
(non-Javadoc)
@see androidappActivity#onOptionsItemSelected(androidviewMenuItem)
/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (itemgetItemId()) {
case MenuFIRST:
setContentView(Rlayouttrustlogin);
mUserId = (EditText) findViewById(Riduser_id);
mLogon = (Button) findViewById(Ridget_token);
mLogonsetOnClickListener(this);
break;
}
return false;
}
private void initProducts() {
if (sProducts != null)
return;
XmlResourceParser parser = getResources()getXml(Rxmlproducts);
ArrayList<Product> products = new ArrayList<Product>();
Product product = null;
try {
int eventType = parsergetEventType();
while (eventType != XmlPullParserEND_DOCUMENT) {
if (eventType == XmlPullParserSTART_TAG
&& parsergetName()equalsIgnoreCase("product")) {
product = new Product();
productsubject = parsergetAttributeValue(0);
productbody = parsergetAttributeValue(1);
productprice = parsergetAttributeValue(2);
productsadd(product);
}
eventType = parsernext();
}
sProducts = new Product[productssize()];
productstoArray(sProducts);
} catch (XmlPullParserException e) {
eprintStackTrace();
} catch (IOException e) {
eprintStackTrace();
}
}
//listview点击事件,里面调用的支付宝接口
@Override
public void onItemClick(AdapterView<> arg0, View arg1, int position,
long arg3) {
try {
Logi("ExternalPartner", "onItemClick");
String info = getNewOrderInfo(position);//这个是订单信息
String sign = Rsasign(info, KeysPRIVATE);//签名加密订单信息什么的
sign = URLEncoderencode(sign);
info += "&sign=\"" + sign + "\"&" + getSignType();
Logi("ExternalPartner", "start pay");
// start the pay
Logi(TAG, "info = " + info);
final String orderInfo = info;
new Thread() {
public void run() {
AliPay alipay = new AliPay(ExternalPartnerthis, mHandler);//这个应该就是支付宝接口了,哈哈,支付宝现在把很多功能都封装了,所以省了很多代码
//设置为沙箱模式,不设置默认为线上环境
//alipaysetSandBox(true);
String result = alipaypay(orderInfo);//这个是返回的结果,你到时候可以根据这个结果加以操作你想操作的,然后基本就完了,其他的你想附加的功能你看着写吧,现在Keyjava配置好就能调用快捷支付了
//后面的这些代码可以改成你自己的,也可以在它们的基础上改
Logi(TAG, "result = " + result);
Message msg = new Message();
msgwhat = RQF_PAY;
msgobj = result;
mHandlersendMessage(msg);
}
}start();
} catch (Exception ex) {
exprintStackTrace();
ToastmakeText(ExternalPartnerthis, Rstringremote_call_failed,
ToastLENGTH_SHORT)show();
}
}
//获得订单信息的方法
private String getNewOrderInfo(int position) {
StringBuilder sb = new StringBuilder();
sbappend("partner=\"");
sbappend(KeysDEFAULT_PARTNER);// 合作身份者id
sbappend("\"&out_trade_no=\"");
sbappend(getOutTradeNo());//这个是订单编号
sbappend("\"&subject=\"");
sbappend(sProducts[position]subject);//这个应该是商品名称
sbappend("\"&body=\"");
sbappend(sProducts[position]body);//这个应该是商品的描述,具体你可以参考demo
sbappend("\"&total_fee=\"");
sbappend(sProducts[position]pricereplace("一口价:", ""));//这个是要付款的金额,到时候你调用的时候改下就行了
sbappend("\"¬ify_url=\"");
// 网址需要做URL编码
sbappend(URLEncoderencode("http://notifyjavajpxxorg/indexjsp"));//服务器异步通知页面,完成交易后通知商家服务器的页面,以post的形式将商品订单信息发送到指定页面,手机客户端不需要可以先放在这不管 。
是不是,这个类很简单看懂吧,就一listview。调用支付宝接口的方法就在onItemClick()方法里面,如果你是一个按钮的话换成按钮点击事件就行了,主要的细节我注释已写。 现在你要想的是,需要哪些数据,提供给onItemClick()方法里面的 String info。demo里面的数据是getNewOrderInfo(int position)这个方法提供的,你可以自己提供或者在上面修改下。
现在,你已经知道代码是如何调用支付宝接口了。接下来,是如何把这些集成到你的项目中去。
登录支付宝,然后有个商户版的,进入申请双功能接口,
然后下载下来的接口包文件有很多语言的源码
我们选择PHP版的UFT-8
里面包括一些文件
images文件里是支付宝相关的一些标志的,lib文件很重要,是整个接口的核心类文件;
alipayconfigphp是相关参数的配置文件
alipayapiphp 是支付宝接口入口文件
notify_urlphp 是服务器异步通知页面文件;
return_urlphp 是页面跳转同步通知文件;
按照开发文档开发即可
注:开发文档就是支付宝官方给你的一些文档,这么接入等等的。注意事项。不用担心,下载下来,已经有例子给你的了,你只能修改下配置即可,更详细的介绍可以去看下php中文网的这篇文章http://wwwphpcn/php-weizijiaocheng-326873html,希望对你有帮助
时间长了,回答给别人看,如果有错请指正,买家输入支付密码,支付宝支付完成后紧接着就会执行同步回调,执行同步回调,同步回调时你可以完成相关的修改订单支付状态等内容,紧接着浏览器页面会直接跳转到给买家准备的通知页面,告诉买家购买成功,等着发货,整个过程一气呵成,貌似事情已经完毕,其实不然,支付宝同步回调后并不知道你那边是否出错,是否执行了修改订单等内容,所以还会执行异步回调,异步回调中你可以和同步回调时一样执行修改订单支付状态,但是这次你改完了,麻烦给支付宝回一声"success",这样支付宝就知道你那边已经接收到消息,否则还会24小时内重复发送异步回调请求。
0条评论