unity 支付宝sdk接入app接入服务端怎么集成sdk

匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。经检测你所在的网络可能存在爬虫,因资源限制,我们只能拒绝你的请求。
如果你是推酷的用户,可以以继续访问使用。
如有疑问,可将IP信息发送到
请求解封。关于支付宝移动无线支付sdk接口集成的问题 - 开源中国社区
当前访客身份:游客 [
当前位置:
你好,想跟你请教个问题:我现在在做一款app内的一个商场支付,服务器是php的。想要使用支付宝的移动无线支付接口,sdk已经下载好了。可是文档只有客户端的说明,没有服务器端的具体操作,所以想问问你具体我该怎么操作,我用的thinkphp框架,希望能得到你的答复。
& & & 我的qq是: 电话是:&
& & &还有就是这个集成接口需要服务器端发送订单信息给到支付宝吗?还是客户端发送支付请求呢?或者说服务器端是不是只需要对支付结果的确认和相关业务,不需要做支付请求!
共有4个答案
<span class="a_vote_num" id="a_vote_num_
可以直接使用bmob支付。第三方支付平台,看着文档就能快速接入
<span class="a_vote_num" id="a_vote_num_
我也搞不懂这个,求代码
<span class="a_vote_num" id="a_vote_num_
首先,客户端会请求服务器下一个订单,在订单信息中有付款金额,订单号等重要信息,然后客户端会带着这些信息调起支付宝(客户端或网页支付),进行支付,支付成功后,支付宝会有一个同步和异步的回调将支付信息通过异步回调返回给服务器端,服务器端接受到参数,在通过SDK的一系列验证后,处理支付成功后PHP端应该处理的逻辑。同步就不用说了吧。就是这样一个过程。
<span class="a_vote_num" id="a_vote_num_
你怎么问我的?
我不弄支付宝的。。。
去支付宝论坛问问吧
更多开发者职位上
有什么技术问题吗?
类似的话题请教APP集成支付宝,服务端该怎么设计呢?
请教APP集成支付宝,服务端该怎么设计呢?
希望大神给我描绘一下整个支付的过程。
1 客户端向业务服务端提交订单,业务服务方生成一个订单号
2 客户端根据订单号生成支付宝所需要的参数,向支付宝的支付接口提交
3 支付宝的支付接口返回同步数据。
4 支付宝服务端请求回调函数,这个回调函数是在业务服务方的,这个请求是异步的。
5 客户端根据用户订单号来去业务服务方确认是否已经支付成功。
这是我找资料看到的过程 ,我想知道在这些环节服务端都干了什么,是怎么去做到的。
毕业论文催的紧,论文项目涉及的支付环节从来没做过,APP客户端服务端都得自己来,希望各位大神指点一下!谢谢了!
请详见淘宝秒杀设计: /question/
服务端的作用主要是异步接收支付宝发送的反馈,并给支付宝返回success,如果不是success,支付宝会根据一定的时间策略不停重发。
三两句话就说得清楚了。
1.客户端选购商品,提交商品信息到服务端(Client-&[{商品1,1件,¥100},{商品1,1件,¥100}]-&Server)
2.服务端订单入库生成订单号反馈给客户端(Server-&[2333333,¥200]-&Client)
3.调用支付宝SDK携带一些参数(,¥200, http://domain/payment_notify )(SDK干了什么只有支付宝知道)
4.用户支付完成,支付宝服务器通知应用服务器(HTTP访问http://domain/payment_notify),服务器做验证判断支付是否成功。
5.支付完成后,回到APP,APP收到通知,访问服务器接口验证是否成功。
服务端要做的事:1.生成订单号,处理业务逻辑;2.根据支付宝服务端发过来的异步请求处理你自己的逻辑,然后给支付宝返回success,不然支付宝会重复发送多次(好像是6次)
Copyright & 2016 phpStudyAndroid 集成支付宝支付详解
Android 集成支付宝支付详解
Android 集成支付宝支付详解
一说到支付宝,相信没有人不知道,生活中付款,转账都会用到。
今天来详细介绍下在android中如何集成支付宝支付到自己的APP中去。让APP能够拥有方便,快捷的支付功能。
准备工作:
商户在里进行产品签约
RSA私钥及公钥生成
上传RSA公钥,签名验证
一.商户在&&里进行产品签约
商户或者开发者到进行产品签约,获取商户的PID。
二.RSA私钥及公钥生成
生成方式一(推荐):使用支付宝提供的一键生成工具:
解压打开文件夹,直接运行“支付宝RAS密钥生成器SHAwithRSA.bat”(WINDOWS)或“SHAwithRSA1024_mand”(MACOSX),点击“生成RSA密钥”,会自动生成公私钥,然后点击“打开文件位置”,即可找到工具自动生成的密钥。
生成方式二:也可以使用OpenSSL工具命令生成
首先进入OpenSSL工具,再输入以下命令。
&span style=&font-size:12&&OpenSSL& genrsa -out rsa_private_key.pem
OpenSSL& pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_private_key_pkcs8.pem #Java开发者需要将私钥转换成PKCS8格式
OpenSSL& rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem #生成公钥
OpenSSL& exit #退出OpenSSL程序&/span&
经过以上步骤,开发者可以在当前文件夹中(OpenSSL运行文件夹),看到rsa_private_key.pem(RSA私钥)、rsa_private_key_pkcs8.pem(pkcs8&#26684;式RSA私钥)和rsa_public_key.pem(对应RSA公钥)3个文件。开发者将私钥保留,将公钥提交给支付宝网关,用于验证签名。以下为私钥文件和公钥文件示例。
注意:对于使用Java的开发者,将pkcs8在console中输出的私钥去除头尾、换行和空&#26684;,作为开发者私钥,对于.NET和PHP的开发者来说,无需进行pkcs8命令行操作。
PKCS8处理后的私钥文件示例:
&span style=&font-size:12&&-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAN0yqPkLXlnhM+2H/57aHsYHaHXazr9pFQun907TMvmbR04wHChVsKVgGUF1hC0FN9hfeYT5v2SXg1WJSg2tSgk7F29SpsF0I36oSLCIszxdu7ClO7c22mxEVuCjmYpJdqb6XweAZzv4Is661jXP4PdrCTHRdVTU5zR9xUByiLSVAgMBAAECgYEAhznORRonHylm9oKaygEsqQGkYdBXbnsOS6busLi6xA+iovEUdbAVIrTCG9t854z2HAgaISoRUKyztJoOtJfI1wJaQU+XL+U3JIh4jmNx/k5UzJijfvfpT7Cv3ueMtqyAGBJrkLvXjiS7O5ylaCGuB0Qz711bWGkRrVoosPM3N6ECQQD8hVQUgnHEVHZYtvFqfcoq2g/onPbSqyjdrRu35a7PvgDAZx69Mr/XggGNTgT3jJn7+2XmiGkHM1fd1Ob/3uAdAkEA4D7aE3ZgXG/PQqlm3VbE/+4MvNl8xhjqOkByBOY2ZFfWKhlRziLEPSSAh16xEJ79WgY9iti+guLRAMravGrs2QJBAOmKWYeaWKNNxiIoF7/4VDgrcpkcSf3uRB44UjFSn8kLnWBUPo6WV+x1FQBdjqRviZ4NFGIP+KqrJnFHzNgJhVUCQFzCAukMDV4PLfeQJSmna8PFz2UKva8fvTutTryyEYu+PauaX5laDjyQbc4RIEMU0Q29CRX3BA8WDYg7YPGRdTkCQQCG+pjU2FB17ZLuKRlKEdtXNV6zQFTmFc1TKhlsDTtCkWs/xwkoCfZKstuV3Uc5J4BNJDkQOGm38pDRPcUDUh2/
-----END PRIVATE KEY-----&/span&
公钥文件示例:
&span style=&font-size:12&&-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxLDkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unormYQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/QpkddCVXnZ4bAUaQjXQIDAQAB
-----END PUBLIC KEY-----&/span&
三.上传RSA公钥,签名验证
登录支付宝官方网站,点击导航栏中“我的商家服务”,点击“查询PID、Key”,在“合作伙伴密钥管理”下(根据不同的产品选择对应的入口),点击“RSA加密”后的“添加密钥”,把自己的公钥复制进去
注意:&上传的公钥是一行&#26684;式,不允许有注释、空&#26684;、换行等!
点击“确认上传”,提示:上传成功,说明已经成功上传。
四.接口调用
首先,导入需要的支付宝SDK资源放入商户应用工程的libs目录下
右键 Build Path,将libs目录下的alipaySDK-.jar导入,选中Order and Export,勾选alipaySDK-.jar
拷贝sdk提供的类到工程下:
这几个类也很简单,不需要做打的修改,只改动pay.java里面的就好了
&span style=&font-size:12&&// 商户PID
public static final String PARTNER = &&;
// 商户收款账号
public static final String SELLER = &&;
// 商户私钥,pkcs8格式
public static final String RSA_PRIVATE = &&;&/span&
添加上对应的参数,java私钥一定要是pkcs8&#26684;式的。
&span style=&font-size:12&&public class Pay {
// 商户PID
public static final String PARTNER = &&;
// 商户收款账号
public static final String SELLER = &&;
// 商户私钥,pkcs8格式
public static final String RSA_PRIVATE = &&;
private static final int SDK_PAY_FLAG = 1;
public Pay(Activity activity) {
this.activity =
* call alipay sdk pay. 调用SDK支付
public void pay(String name, String msg, String orderno, String money,
final Handler handler) {
String orderInfo = getOrderInfo(name, msg, orderno, money);
// 对订单做RSA 签名
String sign = sign(orderInfo);
// 仅需对sign 做URL编码
sign = URLEncoder.encode(sign, &UTF-8&);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
// 完整的符合支付宝参数规范的订单信息
final String payInfo = orderInfo + &&sign=\&& + sign + &\&&&
+ getSignType();
Runnable payRunnable = new Runnable() {
public void run() {
// 构造PayTask 对象
PayTask alipay = new PayTask(activity);
// 调用支付接口,获取支付结果
String result = alipay.pay(payInfo);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
handler.sendMessage(msg);
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
* create the order info. 创建订单信息
public String getOrderInfo(String subject, String body, String orderno,
String price) {
// 签约合作者身份ID
String orderInfo = &partner=& + &\&& + PARTNER + &\&&;
// 签约卖家支付宝账号
orderInfo += &&seller_id=& + &\&& + SELLER + &\&&;
// 商户网站唯一订单号
orderInfo += &&out_trade_no=& + &\&& + orderno + &\&&;
// 商品名称
orderInfo += &&subject=& + &\&& + subject + &\&&;
// 商品详情
orderInfo += &&body=& + &\&& + body + &\&&;
// 商品金额
orderInfo += &&total_fee=& + &\&& + price + &\&&;
// 服务器异步通知页面路径
orderInfo += &&#172;ify_url=& + &\&& + &notify_URL& + &\&&;
// 服务接口名称, 固定值
orderInfo += &&service=\&mobile.securitypay.pay\&&;
// 支付类型, 固定值
orderInfo += &&payment_type=\&1\&&;
// 参数编码, 固定值
orderInfo += &&_input_charset=\&utf-8\&&;
// 设置未付款交易的超时时间
// 默认30分钟,一旦超时,该笔交易就会自动被关闭。
// 取值范围:1m~15d。
// m-分钟,h-小时,d-天,1c-当天(无论交易何时创建,都在0点关闭)。
// 该参数数值不接受小数点,如1.5h,可转换为90m。
orderInfo += &&it_b_pay=\&30m\&&;
// extern_token为经过快登授权获取到的alipay_open_id,带上此参数用户将使用授权的账户进行支付
// orderInfo += &&extern_token=& + &\&& + extern_token + &\&&;
// 支付宝处理完请求后,当前页面跳转到商户指定页面的路径,可空
orderInfo += &&return_url=\&\&&;
// 调用银行卡支付,需配置此参数,参与签名, 固定值 (需要签约《无线银行卡快捷支付》才能使用)
// orderInfo += &&paymethod=\&expressGateway\&&;
return orderI
* get the out_trade_no for an order. 生成商户订单号,该值在商户端应保持唯一(可自定义格式规范)
public String getOutTradeNo() {
SimpleDateFormat format = new SimpleDateFormat(&MMddHHmmss&,
Locale.getDefault());
Date date = new Date();
String key = format.format(date);
Random r = new Random();
key = key + r.nextInt();
key = key.substring(0, 15);
* sign the order info. 对订单信息进行签名
* @param content
待签名订单信息
public String sign(String content) {
return SignUtils.sign(content, RSA_PRIVATE);
* get the sign type we use. 获取签名方式
public String getSignType() {
return &sign_type=\&RSA\&&;
其中public void pay(String name, String msg, String orderno, String money,final Handler handler) 方法是调用支付是用到的,传的参数为商户的名字,商品计费名称,订单号和价&#26684;,最后一个Handler handler参数是用来接收支付回调发送消息的。
支付的线程必须异步调用。
// 服务器异步通知页面路径
orderInfo &#43;= &?ify_url=& &#43; &\&& &#43; &notify_URL& &#43; &\&&; &这里要填写真实的回到地址,是支付宝回调通知服务器的。
orderInfo &#43;= &&it_b_pay=\&30m\&&; &交易的超时时间默认30分钟,可以自己设置。 其余地方不用太大改动。
&span style=&font-size:12&&public class AppActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn_pay = (Button) findViewById(R.id.btn_pay);
btn_pay.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Pay pay = new Pay(AppActivity.this);
pay.pay(&商户名称&, &商品计费名称&, &订单号&, &1&, handler);
Handler handler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
PayResult payResult = new PayResult((String) msg.obj);
// 支付宝返回此次支付结果及加签,建议对支付宝签名信息拿签约时支付宝提供的公钥做验签
// String resultInfo = payResult.getResult();
String resultStatus = payResult.getResultStatus();
if (TextUtils.equals(resultStatus, &9000&)) {
Toast.makeText(AppActivity.this, &支付成功&,
Toast.LENGTH_SHORT).show();
// “8000”代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
if (TextUtils.equals(resultStatus, &8000&)) {
Toast.makeText(AppActivity.this, &支付结果确认中&,
Toast.LENGTH_SHORT).show();
Toast.makeText(AppActivity.this, &支付失败&,
Toast.LENGTH_LONG).show();
这里是模拟调用支付,点击按钮开始跳转支付,handler收到消息后判断支付状态。9000为支付成功,8000为支付确认中,其余支付失败。
支付时出现偶尔出现java.security.spec.InvalidKeySpecException: java.lang.RuntimeException错误,需要调整一下RSA签名私钥,SignUtils 类
把KeyFactory keyf = KeyFactory.getInstance(&RSA&);
改成KeyFactory keyf = KeyFactory.getInstance(&RSA&, &BC&);
&span style=&font-size:12&&public class SignUtils {
private static final String ALGORITHM = &RSA&;
private static final String SIGN_ALGORITHMS = &SHA1WithRSA&;
private static final String DEFAULT_CHARSET = &UTF-8&;
public static String sign(String content, String privateKey) {
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(
Base64.decode(privateKey));
KeyFactory keyf = KeyFactory.getInstance(&RSA&, &BC&);
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
java.security.Signature signature = java.security.Signature
.getInstance(SIGN_ALGORITHMS);
signature.initSign(priKey);
signature.update(content.getBytes(DEFAULT_CHARSET));
byte[] signed = signature.sign();
return Base64.encode(signed);
} catch (Exception e) {
e.printStackTrace();
公钥私钥一定要传正确才能签名成功。
另外的Base64.java和PayResult.java两个类就不用做修改了。
常见的支付错误码如下:
在商户应用工程的AndroidManifest.xml文件里面添加声明:
&span style=&font-size:12&&&activity
android:name=&com.alipay.sdk.app.H5PayActivity&
android:configChanges=&orientation|keyboardHidden|navigation&
android:exported=&false&
android:screenOrientation=&behind& &
&/activity&
android:name=&com.alipay.sdk.auth.AuthActivity&
android:configChanges=&orientation|keyboardHidden|navigation&
android:exported=&false&
android:screenOrientation=&behind& &
&/activity&&/span&&span style=&font-size:12&&&uses-permission android:name=&android.permission.INTERNET& /&
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE& /&
&uses-permission android:name=&android.permission.ACCESS_WIFI_STATE& /&
&uses-permission android:name=&android.permission.READ_PHONE_STATE& /&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE& /&&/span&
特别注意事项:
测试场景一定注意,安装支付宝钱包则直接跳转app支付,没安装则进入H5网页支付。
未安装支付宝钱包测试如下:
Button btn_pay = (Button) findViewById(R.id.btn_pay);
btn_pay.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Pay pay = new Pay(AppActivity.this);
pay.pay(&商户名称&, &商品计费名称&, &&, &1&, handler);
传入参数是我任意填写的。
点击“支付按钮”,开始支付,未安装支付宝钱包,会自动跳转H5网页支付,第一次会输入手机号获取验证码,自动记录。再次进入时直接到确认付款页面,支付中途取消返回结果码为6001。
我的热门文章
即使是一小步也想与你分享

我要回帖

更多关于 unity 支付宝sdk接入 的文章

 

随机推荐