有一家服务提供商(Safaricom)决定使用SOAP向企业发送移动支付通知。当移动用户付费时(通过USSD或通过网络界面),移动货币服务将发送我们应该消费的SOAP消息。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:c2b="http://cps.huawei.com/cpsinterface/c2bpayment">
<soapenv:Header/>
<soapenv:Body>
<c2b:C2BPaymentValidationRequest>
<TransactionType>PayBill</TransactionType>
<TransID>1234560000007031</TransID>
<TransTime>20140227082020</TransTime>
<TransAmount>123.00</TransAmount>
<BusinessShortCode>12345</BusinessShortCode>
<BillRefNumber></BillRefNumber>
<InvoiceNumber></InvoiceNumber>
<MSISDN>254722703614</MSISDN>
<KYCInfo>
<KYCName>[Personal Details][First Name]</KYCName>
<KYCValue>Hoiyor</KYCValue>
</KYCInfo>
<KYCInfo>
<KYCName>[Personal Details][Middle Name]</KYCName>
<KYCValue>G</KYCValue>
</KYCInfo>
<KYCInfo>
<KYCName>[Personal Details][Last Name]</KYCName>
<KYCValue>Chen</KYCValue>
</KYCInfo>
</c2b:C2BPaymentValidationRequest>
</soapenv:Body> </soapenv:Envelope>
不要担心以上细节是公共信息
问题是,使用像瓶子(甚至是Django)这样的框架,如何“接受”此消息,如何从消息中提取细节。
我使用suds-jurko
来使用Soap服务,但我从未接受过SOAP调用的接收端。
至少能够使用payment_data = request.body.read()
from bottle import request
payment_data = request.body.read()
print(payment_data)
虽然我已经尝试在python中使用XML解析器,但它变得越来越复杂。有没有办法让suds(或zeep)允许我从xml对象获取数据?
答案 0 :(得分:0)
我希望答案不会迟到: 对于C2B事务,在github https://github.com/kn9ts/project-mulla上有一个项目,它以POST形式从结账处获取请求,将其转换为SOAP请求,将其发送到safaricom,从safaricom接收响应并以Json格式给出响应